我在JS一個初學者,一直試圖讓下面的代碼工作,但它不給我預期的結果:JavaScript的原型繼承不工作
cat = function(name) {
this.name = name;
this.talk = function() {
alert("Cat "+name+" says meow.");
}
}
cat1 = new cat("George");
cat1.talk();
cat.prototype.changeName = function(name) {
this.name = name;
}
cat2 = new cat("Felix");
cat2.changeName("Bill");
cat2.talk();
從我瞭解JS,從第二次提醒我應該得到"Bill says meow"
。不過貌似財產是沒有得到設置和我仍然得到"Felix says meow."
任何人可以指出錯誤了嗎?這將是非常有益的。提前致謝。
我明白了。你能否詳細解釋爲什麼名稱會引用傳遞給構造函數的參數而不是實際的字段?我來自Java背景,所以這有點奇怪。或者任何有用的URL也會有幫助。 – pflz
這就是爲什麼我從不喜歡Java。它始終隱含地將未聲明的變量與實例屬性相關聯。在JavaScript中並非如此:構造函數中的參數稱爲'name',因此函數內的任何對'name'的引用(包括在其中定義的函數,即閉包)都引用該參數。 'this'是一個特殊的值,指的是函數被調用的上下文的對象。我建議閱讀https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this。 –
非常感謝您的幫助。 – pflz