1. コンストラクタとプロトタイプ1. コンストラクターコンストラクターは、主にオブジェクトを初期化する、つまりオブジェクトのメンバー変数に初期値を割り当てるために使用される特別な関数です。常に コンストラクターを使用する場合は、次の 2 つの点に注意してください。
new は実行されると次の 4 つの処理を実行します。
一部のメンバーは、コンストラクター自体またはコンストラクター内の this のいずれかで、 例えば: 関数A(名前,年齢){ uname は uname です。 this.age = 年齢; this.say = 関数() { console.log(this.uname+'hello'); } } var wh = new A('王欢',18); var xl = new A('リトルベア',18); 上記のコードでは、コンストラクターで this を通じて追加された たとえば、静的メンバーを作成します。 A.sex='女性'; 2. コンストラクタ問題コンストラクタメソッドは非常に便利ですが、メモリを無駄にしてしまうという問題があります 以下のように表示されます。 関数 学生(年齢,名前){ this.age = 年齢; this.name = 名前; this.score = 関数(){ console.log('子どもたちはみんな成績が良いです!'); } } console.dir(学生); var xl = new Student(18,'リトルベア'); var wh = new Student(17,'王欢'); xl.スコア(); wh.score(); 次のコードを使用して、呼び出された 2 つのメソッドのアドレスが同じかどうかを判断します。 console.log(xl.score === wh.score); 印刷結果は次のとおりです。 A の say 関数が 2 回呼び出されると、そのアドレスは同じではないことがわかります。これは、2 つのメモリ空間が開かれ、メモリが無駄になるためです。 3. コンストラクターのプロトタイププロトタイプを通じてコンストラクターによって割り当てられた関数は、すべてのオブジェクトで共有されます。 JavaScript では、すべてのコンストラクターに別のオブジェクトを指す 次のようにコンストラクターを作成します。 関数 学生(年齢,名前){ this.age = 年齢; this.name = 名前; this.score = 関数(){ console.log('子どもたちはみんな成績が良いです!'); } } console.dir(学生); コンストラクター内のすべてのメソッドを印刷すると、次のようになります。 関数 学生(年齢,名前){ this.age = 年齢; this.name = 名前; } Student.prototype.score = function(){ console.log('子どもたちはみんな成績が良いです!'); } console.dir(学生); var xl = new Student(18,'リトルベア'); var wh = new Student(17,'王欢'); xl.スコア(); wh.score(); console.log(xl.score === wh.score); 印刷結果は次のとおりです。 また、関数を 2 回呼び出すと、メモリ領域が 1 つだけ開かれるため、メモリの無駄も削減されます。
4. オブジェクトプロトタイプ __proto__すべてのオブジェクトには、コンストラクター関数の 以下のように表示されます。 関数 学生(年齢,名前){ this.age = 年齢; this.name = 名前; } Student.prototype.score = function(){ console.log('子どもたちはみんな成績が良いです!'); } // console.dir(学生); var xl = new Student(18,'リトルベア'); var wh = new Student(17,'王欢'); コンソールログ(xl); 次のコード名で console.log(xl); //システムは、コンストラクタのプロトタイプオブジェクトを指すために、オブジェクトに__proto__プロパティを追加します。 出力は次のようになります。 認識可能な存在。 console.log(xl.__proto__ === Student.prototype); 印刷結果は次のとおりです: 次のようにインスタンス オブジェクトを通じてスコア関数を呼び出します。 xl.スコア(); 出力は次のようになります。 これは呼び出すことができ、そのメソッド検索ルールは次のようになります。まず、 xl オブジェクトに 次の図を使用して説明できます。 5. コンストラクター前の例に従って、インスタンス オブジェクト ( console.log(Student.prototype); コンソールにログ出力します。 印刷結果は次のとおりです。 オブジェクト プロトタイプ (__proto__) とコンストラクター関数 (prototype) の両方に、プロトタイプ オブジェクト内にコンストラクターと呼ばれるプロパティがあることがわかります。コンストラクター関数はコンストラクター関数自体を指しているため、 次に、オブジェクト プロトタイプとコンストラクター プロトタイプの console.log(Student.prototype.constructor); console.log(xl.__proto__.constructor); 印刷結果は次のとおりです。 それらはすべて 通常、オブジェクトのメソッドはコンストラクターのプロトタイプ オブジェクトに設定されます。コンストラクターに複数のメソッドを追加する場合は、オブジェクト メソッドを使用できます。 以下のように表示されます。 学生.プロトタイプ = { スコア: 関数(){ console.log('子どもたちはみんな成績が良いです!')}, 研究: 関数(){ console.log('一生懸命勉強してください!'); } 変更されたプロトタイプ オブジェクトのコンストラクター属性を印刷する場合: プロトタイプ オブジェクトのポインタが変更されていることがわかります。これは、プロトタイプ オブジェクトがオブジェクトの形式で割り当てられ、コンストラクター プロトタイプ オブジェクトの元のコンテンツが上書きされるためです。このように、変更されたプロトタイプ オブジェクト 次のように: 学生.プロトタイプ = { コンストラクター:学生、 スコア: 関数(){ console.log('子どもたちはみんな成績が良いです!')}, 研究: 関数(){ console.log('一生懸命勉強してください!'); } 最終的に印刷された結果は次のようになります。 成功は元のコンストラクターに戻ります。 6. コンストラクタ、インスタンス、プロトタイプオブジェクトの関係上記の例によると、コンストラクター、インスタンス、プロトタイプ オブジェクトの関係は次の図で表すことができます。 7. JavaScriptメンバー検索メカニズム(ルール)
8. 組み込みオブジェクトの拡張プロトタイプ オブジェクトを使用して、元の組み込みオブジェクトを拡張およびカスタマイズできます。 console.log(配列.プロトタイプ); 印刷結果は次のとおりです。 たとえば、配列内の偶数の合計を求めるカスタム関数を追加します。 Array.prototype.sum = 関数(){ var 合計 = 0; for(var i=0;i<this.length;i++){ 合計 += this[i]; } 合計を返します。 } 組み込みオブジェクトが正常に展開されたかどうかを確認するには、もう一度入力します。 console.log(配列.プロトタイプ); 構築は成功しました。特定のインスタンス オブジェクトを指定して、正常に使用できるかどうかを判断します。 var arr = [1,2,3]; コンソールにログ出力します。 印刷結果は次のとおりです。 2. 階級の本質
JavaScript コンストラクターとプロトタイプに関するこの記事はこれで終わりです。より関連性の高い JavaScript コンストラクターとプロトタイプについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: H5でクリックされたときにaタグの背景色をキャンセルする方法
要件: Celery は Django に導入されています。Django プロジェクトを開始するとき...
目次1. 親コンポーネントが子コンポーネントにデータを渡す1.1. 親コンポーネントコード1.2. ...
序文最近、MySQL で RR レベルでデッドロック問題に遭遇しました。興味深いと思ったので、調べて...
実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...
この記事では、MySQL ビューの原理と使用法についてまとめます。ご参考までに、詳細は以下の通りです...
考えてみてください。なぜcss 、 javascriptのようにbodyタグの末尾ではなく、 hea...
すべてのタグは小文字でなければなりませんXHTML では、すべてのタグは小文字でなければなりません。...
なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...
Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...
目次意味構造例カスタムショートカットキー元に戻すとやり直し録音と再生マクロ要約する意味リクエストをオ...
目次1. コンポーネントの登録2. コンポーネントの使用3. 父から息子へ4. 息子から父へ5. ス...
オープンソース データベース アーキテクチャの設計原則01. 技術の選択最も使い慣れていて、最大限に...
目次1. 匿名スロット2. 名前付きスロット要約するスロット (slot) は、Vue のコンテンツ...
このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...
序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...