2015-10-14 4 views
4

См сегмент кода ниже:Почему оба вызова функции возвращают одно и то же значение?

var o = {f:function(){ return this.a + this.b; }}; 
var p = Object.create(o); 
o.a = 10; 
o.b = 20; 

console.log(o.f()); // output: 30 
console.log(p.f()); // output: 30 

Объект р не обладает свойством p.a и p.b тогда как p.f() возвращение выход 30. Это прототип цепи? Может ли кто-нибудь объяснить это? Заранее спасибо.

+1

Yes..just проверьте здесь консоль http://jsfiddle.net/sandenay/azjmxasu/ –

+0

Вы можете увидеть ' a' и 'b' в свойстве' __proto__' 'p' –

+0

Да, это цепочка protootype. Вы можете избежать этого, затеняя 'a' и' b': 'p.a = p.b = 5; p.f() === 10' – Oriol

ответ

9

Здесь o является prototype из p объекта, так что все из o СВОЙСТВА доступен в p.

Так что, когда вы звоните p.f(), вы получите значения, присвоенные o в this.a и this.b

Смежные вопросы