下面的代码是从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的属性。
这很混乱至。有没有人找出它为什么这样表现?