2018-06-04

1088 ワード

JavaScriptには「子」と「親」の区別もなく、「類」と「例」の区別もない。すべては非常にユニークな「プロトタイプチェーン」モードで継承されています。
Javascriptの中はすべて対象で、すべての対象を結びつける仕組みが必要です。
newコマンドをJavascriptに導入して、原型オブジェクトからインスタンスオブジェクトを生成します。しかし、Javascriptには「類」がありません。どうやって原型の対象を表しますか?
C++とJavaはnewコマンドを使用すると、クラスの構造関数を呼び出します。彼は簡単な設計をしました。Javascript言語ではnew命令の後に付いているのはクラスではなく、構造関数です。
例えば、今はDOGという構造関数があり、犬のオブジェクトの原型を表しています。
function DOG(name){
  this.name = name;
}
この構造関数にnewを使うと、犬のオブジェクトの例が生成されます。
var dogA = new DOG('  ');
三、new演算子の欠点
構造関数でインスタンスオブジェクトを生成すると、属性と方法を共有できないという欠点があります。各インスタンスオブジェクトには、自分の属性と方法のコピーがあります。これはデータ共有ができないだけでなく、資源の浪費も大きい。
四、prototype属性の導入
この点を考慮して、Brendan Eichは構造関数のためにプロトタイプ属性を設定することにした。
この属性はオブジェクト(以下、「prototypeオブジェクト」といいます)を含みます。すべてのインスタンスオブジェクトが共有する属性と方法は、このオブジェクトの中にあります。それらは共有する必要がない属性と方法を、コンストラクタに入れます。
インスタンスオブジェクトが作成されると、プロトタイプオブジェクトの属性と方法が自動的に参照されます。つまり、インスタンスオブジェクトの属性と方法は、2つに分かれています。1つはローカルで、もう1つは参照です。
すべてのインスタンスオブジェクトが同じプロトタイプのオブジェクトを共有しているので、プロトタイプオブジェクトはインスタンスオブジェクトの原型のように見えますが、インスタンスオブジェクトはプロトタイプのオブジェクトを継承しているように見えます。