私は 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
から作成されたすべてのオブジェクトでメソッドを使用できるようになりましたAnimal
new Animal()
これは、このコードで何が起こっているかを正しく理解していますか?
this
また、次の動物オブジェクトをどのように指すかを理解しようとしていますthis.name
:
Animal.prototype.sayName = function() {
console.log("Hi my name is " + this.name);
};
Animal.prototype
実際のオブジェクトを指していない:prototype
このAnimal
オブジェクト インスタンスのオブジェクト? もしそうなら、実際には から呼び出されているので、this
をthis.name
指すべきではありませんか?Animal.prototype
sayName()
Animal.prototype
のコンテキストについての私の理解は、関数を呼び出すオブジェクトthis
をthis
常に指しているということです。ただし、この場合、dog.sayName()
が呼び出されたときに をthis
指し、コンソールに記録されたときにAnimal
どのようthis.name
に等しいかを示します。'Barker'
Animal.prototype がプロトタイプ オブジェクトを指していることを誤解しているかdog.sayName()
、this
またはprototype
.
この小さな例には複数の質問がありますが、ここで何が起こっているかを正確に把握することは、これらの基本的な概念を理解するのに本当に役立ちます。