は、私は以下のコードの塊があります。私の理解あたりとして今、プロトタイプおよび使用方法のJavascript
function Foo(name){
this.name = name;
}
Foo.prototype.myName = function() {
return this.name;
}
function Bar(name, label){
Foo.call(this, name);
this.label = label;
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.myLabel = function(){
return this.label;
}
var a = new Bar("a" , "obj a");
a.myName();
a.myLabel();
オーケーを
- それは が
- それが作成する名前を設定する関数
Foo
を作成しますリンクされたプロトタイプObject of Fooに関数myName
があります。 - これはラベルを設定するだけの関数
Bar
を作成し、Fooの機能を使用して名前を設定します。 - 次に、プロトタイプのリンケージがFooとBarの間で確立されます。だから私はFooとBarのためにお互いにリンクされた2つの別々のプロトタイプオブジェクトがあると仮定します。
- バーのプロトタイプオブジェクトの内部には、
myLabel
という機能があります。 - 新しいバーを呼び出すと、新しいオブジェクト
a
が作成され、プロトタイプオブジェクトがバーのプロトタイプにリンクされます。
のでtakewaysは以下のとおりです。
のFooのプロトタイプは、1つの機能を得る含まれています -
myName
はFoo自体はちょうど
バーのプロトタイプは、1つを有するされproperty-名前を設定します関数を取得する -
myLabel
バー自体は、単にプロパティを設定している - mylabelという
a's
プロトタイプは、それ自体でFoo's prototype
にリンクされているBar's prototype
にリンクされているオブジェクト。合計で3つのプロトタイプオブジェクトがあります。
このような考え方は正しいですか?ディスカッションを啓発するために何かを修正または追加してください。私はこの言語にはかなり慣れていないし、ニュアンスでも、プロトタイプの使用例/実用例でもほとんどない。その後
Foo.prototype = { constructor: Foo, myName: function() { return this.name}};
Bar
バーのインスタンスに「名前」を適用するために呼び出しFoo
が新しいBar
オブジェクトとしてその二番目のパラメータを設定する前に、むしろそれ自体を行うよりも、構築されている:まずFoo.prototype
を列挙する
*「合計で3つのプロトタイプオブジェクトがあります」* - 正しくはありません。オブジェクト 'a'のプロトタイプは、' Bar.prototype'プロパティによって参照される同じオブジェクトです。 'Bar.prototype'プロパティは' Bar'オブジェクトのプロトタイプではなく、 'new Bar()'で作成されたオブジェクトのプロトタイプになるオブジェクトです。 ( 'Bar'は関数でも、' Bar.prototype'が何を指しているのかと全く関係ない独自のプロトタイプを持つオブジェクトです) – nnnnnn
Ok。 Bar.prototype(または新しい呼び出しの後のオブジェクトのプロトタイプ)とFoo.prototypeは、再び同じプロトタイプオブジェクトを参照しています...正しいのですか? – kushalvm
いいえ、 'Bar.prototype'と' Foo.prototype'は異なるオブジェクトを参照しています。 (申し訳ありませんが、これについて深く説明することは、私がコメントでできることを超えており、徹底的な回答を書く時間がありません。) – nnnnnn