私は CodeAcademy JS の演習に取り組んでおり、この例について質問があります。
//Animal class
function Animal(name) {
this.name = name;
}
//Attach sayName method to Animal class
Animal.prototype.sayName = function() {
console.log("Hi my name is " + this.name);
};
//create an animal object instance
var dog = new Animal('Barker');
//invoke a method attached to the prototype from the object instance
dog.sayName();
このコードの私の理解は次のとおりです。
Animal()JS は、関数 (関数コンストラクター)の呼び出し前に new キーワードを使用した結果として、var dog が指す新しい Animal オブジェクト インスタンスを作成します。- var dog オブジェクトのプロトタイプには、
sayName()次の行にメソッドが関連付けられています。Animal.prototype.sayName = function() sayName()がクラスにアタッチされているため、関数コンストラクターを使用してクラスprototypeから作成されたすべてのオブジェクトでメソッドを使用できるようになりましたAnimalnew Animal()
これは、このコードで何が起こっているかを正しく理解していますか?
thisまた、次の動物オブジェクトをどのように指すかを理解しようとしていますthis.name:
Animal.prototype.sayName = function() {
console.log("Hi my name is " + this.name);
};
Animal.prototype実際のオブジェクトを指していない:prototypeこのAnimalオブジェクト インスタンスのオブジェクト? もしそうなら、実際には から呼び出されているので、thisをthis.name指すべきではありませんか?Animal.prototypesayName()Animal.prototype
のコンテキストについての私の理解は、関数を呼び出すオブジェクトthisをthis常に指しているということです。ただし、この場合、dog.sayName()が呼び出されたときに をthis指し、コンソールに記録されたときにAnimalどのようthis.nameに等しいかを示します。'Barker'Animal.prototype がプロトタイプ オブジェクトを指していることを誤解しているかdog.sayName()、thisまたはprototype.
この小さな例には複数の質問がありますが、ここで何が起こっているかを正確に把握することは、これらの基本的な概念を理解するのに本当に役立ちます。