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 ヘッドタグメタ

推薦する

HTMLフォーム要素の包括的な理解

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<!DO...

Centos7 に yum を使用して MySQL をインストールし、リモート接続を実現する方法

Centos7はyumを使用してMySQLをインストールし、リモート接続を実現する方法です。MySQ...

MySQL 8.0.12 のインストールと環境変数の設定チュートリアル (Win10 の場合)

Windows 10 プラットフォームでの MySQL のインストール、構成、起動、ログイン、環境...

Win10にmysql8.0.15 winx64をインストールしてサーバーに接続する際に問題が発生しました

1. mysql-8.0.15をダウンロード、インストール、設定する1. 公式サイト (https:...

jsネイティブカルーセルプラグインの制作

この記事では、jsネイティブカルーセルプラグインの具体的なコードを参考までに共有します。具体的な内容...

MySQLは既存のコンテンツを保持し、後でコンテンツを追加します

このコマンドは、データ テーブル ff_vod を変更し、vod_url フィールドの内容の後に 9...

Linuxカーネルをコンパイルする方法

1. 必要なカーネルバージョンをダウンロードする2. オペレーティングシステムにアップロードする3....

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...

JavaScript の Strict モードの詳細な説明

目次導入厳密モードの使用厳格モードの新機能例外を強制的にスローする変数の使用を簡素化する議論を単純化...

favicon.ico についていくつか注意点があります (ルートディレクトリに置くのがベストです)

任意のウェブページを開きます。例: http://www.baidu.com/ ブラウザのタブのヘッ...

JavaScript はドラッグ可能なモーダルボックスを実装します

この記事では、ドラッグ可能なモーダルボックスを実装するためのJavaScriptの具体的なコードを参...

CSS3はキングをマッチングさせるときにパーティクルアニメーション効果を実現します

コーディングをしていると、多くのことが同じ結末を迎えることに気づくでしょう。問題を解決する方法は何千...

ftp は SSH 経由で Linux にリモート接続します

まず Linux に ssh をインストールします。例として Centos を使用します。ポータル:...

CSS は Apple のスムーズなスイッチ ボタン効果を模倣します

目次1. コード分析2. ソースコードソースコード1. コード分析1.1 HTMLコード分析 <...