Наследование. ПОчему так?
Разбираюсь с наследованием по руководству Флэнагана. Там указывается функция создания нового объекта наследующего прототип:
function inherit(p){
if (p==null) throw TypeError();
if (Object.create) {
return Object.create(p);
}
var t = typeof p;
if (t !== "object" && t !== "function") throw TypeError;
function f() {};
f.prototype = p;
return new f();
}
Работая с ней, к примеру, так:
var o = {};
o.x = 1;
var p = inherit(o);
p.x = 3;
я в итоге получаю вывод: o: Object {x: 1} p: Object {x: 3, x: 1} Вопрос: почему свойство х дублируется, а не изменяется? Где я запутался? |
Что за консоль так выводит? Свойства не могут дублироваться, они находятся в разных объектах:
p.x == 3 // → true p.__proto__.x == 1 // → true |
Консоль хрома выводит.
Цитата:
|
х == 1 находится в прототипе объекта р, х == 3 свойство самого объекта р
|
Я правильно понимаю что в любой текущий момент мы работаем с одним определенным свойством х: если есть свойство х самого объекта, то с ним, а иначе поднимаемся к свойству х прототипа? А вот отображение обоих свойств х одновременно - это "глюк" консоли хрома?
|
да
|
Это не глюк, это фича..
|
Цитата:
|
console.log().
Про консоль.дир не знал. Теперь почитаю про нее. |
| Часовой пояс GMT +3, время: 14:12. |