JavaScriptの原型の概念と使用
2298 ワード
1.原型の概念
(1)なぜ原型が必要ですか?
構造関数を記述する時、実際にはオブジェクトにどのようなメンバーが必要ですか?
jsは解釈型言語で、説明が必要なコードは一回実行されます.下記のコードは複数のオブジェクトを作成するという意味です.
じゃ、コンストラクタ
このように、方法のように共有できるデータを個別に記憶し、各オブジェクトが方法で共有できるようにする必要がある.
したがって、共有データを格納する特殊なオブジェクトを導入し、各オブジェクトが共有データを直接使用することができます.
(2)原型は何ですか?
プロトタイプはごく普通の対象ですが、いくつかのオブジェクトに共有データを保存していますので、プロトタイプといいます.
(3)原型の構造?
①関数を書くと、内部が自動的に作成されます.
オブジェクトを使用します.
関数.prototype 訪問します
②このオブジェクトは一つのデータだけを含んでいます.
トラック プロパティを説明するために使用します.
オブジェクトに対応する関数;
③オブジェクトには、関数を構成関数として使用すると、作成したオブジェクトがデフォルトで特殊オブジェクトに接続されます.(特殊なオブジェクトに接続するということは、特殊なオブジェクトのメンバーを指し、直接にこのコンストラクタによって作成されたオブジェクトに使用することができます.)
この特殊対象は
原型(元/元の形態/モデル).
(4)いくつかの概念を追加する(対象言語に従う):
概念語
作用
と呼ぶ
コンストラクタ
オブジェクトがどのメンバーを持つべきかを説明するために使用されます.
クラス クラス
属性 property
オブジェクトを表す特徴データ
フィールド field
方法 method
オブジェクトの挙動を説明するために使用します.
関数 機能
コンストラクタで作成したオブジェクト
このコンストラクタ(クラス)の例として知られており、このプロセスを実装と呼ぶ.
インスタンスinstance
この特殊なオブジェクトは構造関数と関連しても、実例のオブジェクトと関連付けることができるので、この特殊なオブジェクトはプロトタイプ属性を使用して参照されます.
構造関数のプロトタイプ属性は、プロトタイプと略称される.インスタンスオブジェクトがデフォルトでこの特殊オブジェクトに接続されているため、この特殊オブジェクトは
例のオブジェクトの原型オブジェクトを原型と略称します.
2.原型の使い方
プロトタイプの使用はプロトタイプに方法を提供し、削除方法などです.
一般的に原型に増加するのは方法であり、属性が少ない.
(1)なぜ原型が必要ですか?
構造関数を記述する時、実際にはオブジェクトにどのようなメンバーが必要ですか?
jsは解釈型言語で、説明が必要なコードは一回実行されます.下記のコードは複数のオブジェクトを作成するという意味です.
var obj;
for(var i=0; i<10; i++){
obj = {};
}
たとえば、下記のコードは永遠に等しくありません.console.log([] == []); // false
console.log({} == {}); // false
console.log(function(){} == function(){}); // false
参照の種類については、==と==がメモリアドレスと比較されます.じゃ、コンストラクタ
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
this.sayHello = function() {};
}
var p1 = new Person('jim',19, ' ');
var p2 = new Person('jack',20, ' ');
メモリには二つのsayHelloのコピーがありますが、論理は同じです.資源を浪費します.このように、方法のように共有できるデータを個別に記憶し、各オブジェクトが方法で共有できるようにする必要がある.
したがって、共有データを格納する特殊なオブジェクトを導入し、各オブジェクトが共有データを直接使用することができます.
(2)原型は何ですか?
プロトタイプはごく普通の対象ですが、いくつかのオブジェクトに共有データを保存していますので、プロトタイプといいます.
(3)原型の構造?
①関数を書くと、内部が自動的に作成されます.
オブジェクトを使用します.
関数.prototype 訪問します
②このオブジェクトは一つのデータだけを含んでいます.
トラック プロパティを説明するために使用します.
オブジェクトに対応する関数;
③オブジェクトには、関数を構成関数として使用すると、作成したオブジェクトがデフォルトで特殊オブジェクトに接続されます.(特殊なオブジェクトに接続するということは、特殊なオブジェクトのメンバーを指し、直接にこのコンストラクタによって作成されたオブジェクトに使用することができます.)
この特殊対象は
原型(元/元の形態/モデル).
(4)いくつかの概念を追加する(対象言語に従う):
概念語
作用
と呼ぶ
コンストラクタ
オブジェクトがどのメンバーを持つべきかを説明するために使用されます.
クラス クラス
属性 property
オブジェクトを表す特徴データ
フィールド field
方法 method
オブジェクトの挙動を説明するために使用します.
関数 機能
コンストラクタで作成したオブジェクト
このコンストラクタ(クラス)の例として知られており、このプロセスを実装と呼ぶ.
インスタンスinstance
この特殊なオブジェクトは構造関数と関連しても、実例のオブジェクトと関連付けることができるので、この特殊なオブジェクトはプロトタイプ属性を使用して参照されます.
構造関数のプロトタイプ属性は、プロトタイプと略称される.インスタンスオブジェクトがデフォルトでこの特殊オブジェクトに接続されているため、この特殊オブジェクトは
例のオブジェクトの原型オブジェクトを原型と略称します.
2.原型の使い方
プロトタイプの使用はプロトタイプに方法を提供し、削除方法などです.
一般的に原型に増加するのは方法であり、属性が少ない.
//
function Person(){}
Person.prototype.type = 'Person';
var p = new Person();
p.type; // 'Person'
(1)オブジェクトの動特性を直接利用してメンバーを追加する .prototype.XXX = xxx;
(2)原型オブジェクトを直接置き換える方法 .prototype = {
constructor: ,
XXX1: xxx1,
XXX2: xxx2,
XXX3: xxx3,
...
}//
置換法を利用して原型を使う時、出現しやすい問題:実例は作成された時点でその原型は固定されています.