2016-01-13 4 views
1
var father = { 
    b: 3, 
    c: 4 
}; 

var child = Object.create(father); 
child.a = 1; 
child.b = 2; 

child.b теперь 2, chrome devtools показывает, что у ребенка есть свойство b, которое наследуется. Как мне добраться до этого, и почему это не переоценивается?Как получить собственность отца в этом примере?

+0

Что вы пытаетесь сделать? выглядит запутанным –

ответ

0

У объектов в javascript есть ссылка на другие Объекты под названием __proto__. Вы можете получить свойства родительского объекта с помощью этого:

var father = { 
 
    b: 3, 
 
    c: 4 
 
}; 
 

 
var child = Object.create(father); 
 
child.a = 1; 
 
child.b = 2; 
 
console.log(child);//prints Object { a: 1, b: 2 } 
 
console.log(child.__proto__);//prints Object { b: 3, c: 4 }

Вы можете использовать эту тайную собственность для целей обучения, но это не хорошая идея, чтобы использовать его в реальных сценариях потому что он не существует в всех браузерах (в частности, Internet Explorer), поэтому ваши сценарии не будут переносной.

Имейте в виду, что __proto__ не то же самое, как прототип, так как __proto__ является свойством экземпляров (объектов), в то время как прототип является свойством функций конструктора, используемых для создания этих объектов. [1]

я настоятельно предлагаем использовать Object.getPrototypeOf():

var father = { 
 
    b: 3, 
 
    c: 4 
 
}; 
 

 
var child = Object.create(father); 
 
child.a = 1; 
 
child.b = 2; 
 
console.log(child);//prints Object { a: 1, b: 2 } 
 
console.log(Object.getPrototypeOf(child));//prints Object { b: 3, c: 4 }

Reference

Object-Oriented JavaScript - Second Edition [1]

+0

'Object.getPrototypeOf' - это не просто« альтернатива », это единственная правильная вещь. '__proto__' устарел и больше не должен рекламироваться. – Bergi

0

Это в одну сторону, bu Вам нужно прочитать немного больше о теневом и наследовании и цепи прототипов.

Object.getPrototypeOf(child).b 
Смежные вопросы