- Javascript 具有本地属性(own property),也有一些属性是从原型对象继承而来的,称为继承属性。
打印结果如下:function Obj() { this.x = 10; // 本地属性 own property } Obj.prototype.x = 0; // 继承属性 Obj.prototype.y = 1; // 继承属性 let o = new Obj(); console.log(o)
- 原型链
假设要查询对象o的属性y, 如果本地属性中不存在y, 那么会继续在o的原型对象中查找属性y。如果原型对象中也没有y,但这个原型对象也有原型,那么继续在这个原型对象的原型上执行查询,直到没找到y或者查找到一个原型是null的对象为止。 对象的原型属性构成了一个“链”。 通过这个“链”可以实现属性的继承。- 原型链上查找继承属性
console.log(o.y) // 1
- 本地属性会屏蔽同名继承属性
console.log(o.x) // 10
- 新增基本数据类型的属性时,若与继承属性同名,会自动创建一个与继承属性无关的新本地属性
o.y = 20; console.log(Obj.prototype.y) // 1
- 若继承属性为引用数据类型,修改其值会影响到原型上的属性
Obj.prototype.list = [1,2,3]; o.list[0] = 0; console.log(Obj.prototype.list); // [0, 2, 3]
- 原型链上查找继承属性
- 属性检测的三种方法
- 属性遍历的三种方法
如何更好地理解Javascript对象的自有属性和原型继承属性