下面的代碼是從http://bonsaiden.github.com/JavaScript-Garden/的Javascript原型的傳承
function Foo() {
this.value = 42;
}
Foo.prototype = {
method: function() {}
};
function Bar() {}
// Set Bar's prototype to a new instance of Foo
Bar.prototype = new Foo();
Bar.prototype.foo = 'Hello World';
// Make sure to list Bar as the actual constructor
Bar.prototype.constructor = Bar;
我也碰到過這樣的解釋採取多次 「當訪問一個對象的屬性,首先它會檢查對象自身具有財產和如果不是,它會轉到該對象的原型以查找該屬性等。「
但我努力理解浩其實這工作,因爲下面的代碼
var test1 = new Bar();
var test2 = new Bar();
test1.value = 24;
現在值不是test1的對象的一部分的行爲,但它是其原型的屬性,它是一個Foo對象,並且由於原型是Foo對象,Bar的所有實例都將共享值屬性,我期望上面的代碼所做的是將該值屬性設置爲24,但相反,它會爲test1創建一個名爲'value'的新屬性對象並將其賦值24,將原型中的value屬性保留爲其初始值42.這聽起來不像共享。 test2.value仍然有一個值42.當我看着螢火蟲控制檯中的原型鏈時,它顯示test1具有值爲24的屬性,並且其原型具有值爲42的屬性。
這很混亂至。有沒有人找出它爲什麼這樣表現?