var myObject = { a:2 } myObject.a;
var anotherObject = { a: 2 } var myObject = Object.create(anotherObject); myObject.a; // 2
Object.create(...) 会创建一个对象并把这个对象的 [[Prototype]] 关联到指定的对象。现在 myObject 对象的 [[Prototype]] 关联到了 anotherObject。myObject.a 并不存在,但是还是找到了 2。
var anotherObject = { a: 2 } var myObject = Object.create(anotherObject); for(var k in myObject){ console.log('found: ' + k) } // found: a ('a' in myObject); // true
for...in 遍历对象原理和查找 [[Prototype]] 链类似,任何可以通过原型链访问到的属性都会被枚举。因此,通过各种语法进行属性查找时都会查找 [[Prototype]] 链,直到找到属性或者查找完整条原型链