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タグの背景色をキャンセルする方法
重要な注意: この記事を読む前に、Docker コンテナに関する知識と、一般的な Docker 操作...
序文最近、MySQL のインデックスについて読んでいました。結合されたインデックスを見ると、左端の原...
最近、多くの学生から Web ページのエンコーディングについて質問を受けています。gb2312 と ...
目次1. 説明2. インストール3. テスト1. 説明Vue Router は、Vue.js の公式...
目次1. ReactJS の紹介2. ReactJSの理解とReactJSの利点1. ReactJS...
Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...
目次charとvarcharの違いcharとvarcharの違い上記は、MySQL における cha...
序文最近、偶然 MySQL の coalesce を発見しました。ちょうど時間があったので、MySQ...
目次1. コンストラクタとインスタンス2. プロパティプロトタイプ3. プロパティ __proto_...
bash を終了する場合は、次の 2 つのオプションがあります。最初のもの: Ctrl + d を押...
HTMLでは、中国語のフレーズ「學好好學」は「學好好學」と表現できます。プロジェクトでは、SMSアラ...
目次1. リソースファイル2. インストール2.1 詳細な手順2.1.1 ディスクイメージのマウント...
注意 ノーブレークスペース = ノーブレークスペース、 iexcl ¡ &...
目次序文分析するデータ合計繰り返し率どこにあるかと持っているかの違い要約する序文私はソフトウェアの導...
トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...