Если вы видите "johnson"
в вашем alert
, то он работает точно правильно.
Когда вы добавляете свойство непосредственно к объекту, оно имеет приоритет над любым свойством с тем же именем на его прототипе. Таким образом, в
var a = new b();
... хотя прототип a
«ы имеет name="david"
, a
сам имеет name="johnson"
(назначен в вызове b
), и так, что выигрывает.
Чтение значения свойства объекта в основном работает следующим образом (предположим, что __proto__
магическое свойство объекта, которое ссылается на свой прототип [который будет, в ES6]):
function getPropertyValue(obj, propertyName) {
// Start with the object itself
var o = obj;
// Loop until we find an object in the prototype chain that has a property called "name"
while (!o.hasOwnProperty(propertyName)) {
// This one doesn't, look to its prototype
o = o.__proto__;
// Did it have one?
if (!o) {
// No, property not found
return undefined;
}
}
return o[propertyName];
}
Почему голосования вниз , Я опубликовал что-то неправильно – Carlos
Хорошо, говоря, что «это не работает», не говоря ни о том, что вы ожидаете, так и о том, что вы получаете, является проблемой. –