我很困惑,爲什麼我在這裏得到這個錯誤。我想要一些啓發。JavaScript對象原型似乎破碎
function c(me) { this.me = me; }
c.prototype.identify = function() { return "I am " + this.me; };
function d(me) { c.call(this, me); }
d.prototype = Object.create(c.prototype);
d.prototype.speak = function() { return "Hello, " + this.identify() + "." };
var d1 = new d("d1");
var d2 = new d("d2");
console.log(d1.speak());
console.log(d2.speak());
console.log(d.speak()); //returns: TypeError: d.speak is not a function
returns: TypeError: d.speak is not a function
我明確地將屬性添加到speak
d.prototype
。實際上,d1
和d2
都可以訪問其原型層次結構中的屬性/函數。但是當我試圖在d
上調用它時,我得到一個TypeError。我嘗試了各種「調整」,無濟於事。爲了排除任何範圍問題,我嘗試在IIFE中包裝各種部分,但它沒有效果。我從最後一行
console.log(d.speak); //returns: undefined
,並得到undefined
刪除()
。這告訴我speak
不是d
有權訪問的屬性/函數。即。將speak
更改爲blah
,並獲取登錄到控制檯的相同undefined
。
console.log(d.blah); //returns: undefined
我知道我錯過了一些可能對一組新的眼睛很明顯的小東西。
'd.speak()'不會工作,因爲你已附上'說話()'函數到'D'的原型對象函數,而不是'd'函數本身。因此,無論是需要將'speak()'函數附加到'd'本身,比如'd.speak = function(){}'或調用'd.prototype.speak()'來調用它。 –
我不知道你期望'd.speak()'返回什麼結果? – Oriol
@Oriol,'你好,我沒有定義。'是我的期望。 – ppovoski