Ниже код взят из 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 Object, и поскольку прототип является объектом Foo, все экземпляры Bar будут совместно использовать свойство value. Что я ожидаю, что указанный выше код должен сделать, это установить это значение в значение 24, но вместо этого он создает новое свойство с именем 'value' для test1 object и присваивает ему значение 24, оставляя свойство value в прототипе до его исходного значения 42. Это не похоже на совместное использование. test2.value по-прежнему имеет значение 42. Когда я смотрю цепочку прототипов в консоли firebug, это показывает мне, что test1 имеет свойство value с 24, а его прототип имеет свойство value с 42.
Это очень запутывает к. Имеет ли кто-нибудь, что вы выяснили, почему он ведет себя таким образом?