JSコンストラクタとインスタンス化およびプロトタイプ導入の関係

JSコンストラクタとインスタンス化およびプロトタイプ導入の関係

1. コンストラクタとインスタンス化

オブジェクト指向プログラミングの場合、最初のプロセスは抽象化 => 次にインスタンス化です。たとえば、人を抽象化すると、その人の基本的な情報がわかります。名前、年齢、性別など

まず抽象化し、抽象化が完了したらインスタンス化します。

2. コンストラクターとインスタンス化の関係は何ですか?

//このカスタムコンストラクタは抽象関数Person(name,age,sex){内にあります

    this.name=名前;

    this.age=年齢;

    this.sex=セックス;

    this.say=関数(){

        console.log("私の名前は",name)

    }

}

// このプロセスはインスタンス化です。let per1=new Person('司藤',300,'女');

per1.say(); //呼び出し //let per1=new Person('司藤',300,'女');

上記のコード行を通じて。

次のような結論を導き出すことができます。

コンストラクターとインスタンス オブジェクトの関係は次のとおりです。

インスタンス オブジェクトはコンストラクターを通じて作成する必要があります。

同時に、インスタンスオブジェクトのコンストラクタはコンストラクタであることがわかります。

この記述が正しいことを証明しましょう。上記のコードは変更されません。

console.log( per1.constructor===Person ) //trueを返す

完全に説明してください:インスタンス オブジェクトのコンストラクターはコンストラクターであるという記述は正しいです。

3. per1.say は per2.say と等しいですか?

 関数 Person(名前,年齢,好み) {

    this.name=名前;

    this.age=年齢;

    this.like=いいね;

    this.say=関数(){

        console.log('食事を抜くことができます');

    }

}

var per1=new Person("司藤",300,'玩');

var per2=new Person('白浅','10000','玩');

per1.say();

per2.say();

console.log( per1.say == per2.say ) //false

4. per1.sayはper2.sayによって導き出された結論と等しくない

console.log( per1.say == per2.say ) //falseなので

結論を導き出すことができます。

つまり、per1.say() と per2.say() は同じメソッドを呼び出しません。

内容は同じですか?

console.log( per1.say()==per2.say() ) //true

説明内容は同等

5. サンプルコードの問題

5.1 コードの問題

関数 Person(名前,年齢,好み) {

    this.name=名前;

    this.age=年齢;

    this.like=いいね;

    this.say=関数(){

        console.log('食事を抜くことができます');

    }

};

(var インデックス = 0; インデックス < 100; インデックス++) {

    var per=new Person("司藤",300,'玩');

    パー.say();

}

このコード:メモリ内に 100 個のスペースが開きます。各スペースには say メソッドがあります。しかし、それぞれの方法は異なります。しかし、出力は同じです。つまり、実行ロジックは同じです。その結果、スペースが無駄になります。そのため、このプロジェクトではスペースの無駄が生じます。

最適化できますか?

5.2 スペースの無駄を解消するためにコードを最適化する

関数comSay(){

    // 同じロジックを実行します console.log('食事を抜くことができます')

};



関数 Person(名前,年齢,好み) {

    this.name=名前;

    this.age=年齢;

    this.like=いいね;

    this.say=comSay; //括弧を追加しないでください};

var per1=new Person("司藤",300,'玩');

var per2=new Person('白浅','10000','玩');

console.log( per1.say==per2.say ) //true

こうすることでスペースを節約できます。呼び出されるたびに同じメソッドになります。

5.3 この方法を使用すると、プロトタイプ法も使用できます。

関数 Person(名前,年齢,好み) {

    this.name=名前;

    this.age=年齢;

    this.like=いいね;

};

Person.prototype.comSay=function(){

    console.log('食事を抜くことができます')

}

var per1=new Person("司藤",300,'玩');

var per2=new Person('白浅','10000','玩');

console.log( per1.comSay==per2.comSay ) //true

// プロトタイプを通じてデータ共有も解決できる

プロトタイプの役割:データ共有とスペース節約。

JS コンストラクタとインスタンス化の関係とプロトタイプの導入についての記事はこれで終了です。JS コンストラクタとインスタンス化の関係とプロトタイプの導入についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScriptプロトタイプと例の詳細な説明
  • Js の継承とプロトタイプチェーンを理解するのに役立つ記事
  • JavaScriptプロトタイプチェーン図のまとめと実践
  • JS での new の手書き実装
  • JS の new 関数の詳細な説明
  • JavaScript のコンストラクター、プロトタイプ、プロトタイプ チェーン、new についてどれくらい知っていますか?

<<:  LinuxカーネルマクロContainer_Ofの詳細な説明

>>:  リフレッシュリダイレクトを実現する HTML ヘッドタグメタ

推薦する

VUE+Canvasは、インゴットを受け取る富の神のゲームを実装します

前回のキャンバス ゲーム シリーズへようこそ: 《VUEがFlappy Birdを実装しました〜〜〜...

Vue2は応答性を提供するためにprovide injectを実装しています

1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...

HTMLテーブルではテーブルの外側の境界線のみが表示されます

質問があります。Dreamweaver で、3 行 1 列のログイン フォーム (ログイン、登録、パ...

ドラッグ可能で編集可能なガントチャートの詳細な説明(HighchartsはVueとReactで使用できます)

序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...

Centos7サーバーの基本的なセキュリティ設定手順

pingスキャンをオフにする(役に立たないが)まずルートに切り替えるエコー 1 > /proc...

Oracle VM VirtualBox の CentOS7 オペレーティング システムのインストール チュートリアル図

目次インストール手順環境設定実行構成インストール手順ダウンロードアドレス: バージョン6.0 最初に...

vue-cli でレスポンシブ レイアウトを実装する方法

フロントエンド開発を行うと、PCとモバイル端末の適応に必然的に直面することになります。このような問題...

...

時間に基づいて日付をクエリするためのMySQL最適化テクニック

たとえば、昨日新規登録されたユーザーを照会するには、次の 2 つの書き方があります。 説明する ch...

React 非親子コンポーネントパラメータ渡しのサンプルコード

React は、ユーザー インターフェイスを構築するための JavaScript ライブラリです。 ...

「いいね!」文がインデックスに登録されないのはなぜですか?

序文この記事は、最も人気のある言語で最も退屈な基礎知識を説明することを目的としていますこのトピックは...

MySQL スライディングオーダー問題の原理と解決の例分析

この記事では、例を使用して、MySQL スライディング順序問題の原理と解決方法を説明します。ご参考ま...

ウェブページ制作と饅頭の関係(体験の共有)

昨日は遅くまで寝ていて、一日中起きていました。私の年齢では、夜更かしして本を書くのはもう無理のようで...

Linux7で仮想ホストを実装する3つの方法

1. 同じIPアドレス、異なるポート番号仮想ホスト 1: ホスト IP アドレスは 172.16.3...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...