私は保守的なOOP言語(Java)から来て、実際にはJavascriptの継承を理解していません。私もプロトタイプ全体のコンセプトで揺れ動いていますが、私は、私の必要性に答える例であるhereを見ましたが、詳細を理解していないし、なぜ物事が異なって行われないのか分かりません。その例にとるJavascriptプロトタイプと継承
は、
function Animal(name) {
this.name = name;
}
// Example method on the Animal object
Animal.prototype.getName = function() {
return this.name;
}
function Mammal(name, hasHair) {
// Use the parent constructor and set the correct `this`
Animal.call(this, name);
this.hasHair = hasHair;
}
// Inherit the Animal prototype
Mammal.prototype = Object.create(Animal.prototype);
// Set the Mammal constructor to 'Mammal'
Mammal.prototype.constructor = Mammal;
を次のように正しい実装である私はObject.call()関数の目的を理解していないにも私は単にObject.createは()を使用した理由を理解していませんちょうどAnimal.prototype。また、なぜ最後の行にコンストラクタが追加されていますか?それは前のステップで消去されているのでしょうか?すべてのMammalインスタンスでコードを共有したい場合はどうすればよいですか?あなたがMammal.prototype.constructor = Mammal;
を呼び出していない場合は、事前
:ここ
は良いアドバイスですメソッドを呼び出すときは直接呼び出します。それ以外の場合、 'this'はメソッドの呼び出しコンテキスト(メソッドが呼び出されたオブジェクト)によって決定されます。 – rand