- 解释:
- 当使用
Object.defineProperty
将dog
实例的species
属性的configurable
特性设为false
后,该属性不能再通过delete
操作符删除,也不能再次修改其特性(除writable
为true
时可修改属性值)。
- 当在原型链上修改
species
属性时,由于dog
实例已经有了自己的species
属性(尽管它最初是从原型链继承而来),所以不会影响到dog
实例的species
值。dog
实例的species
值仍然保持不变,因为JavaScript查找属性时,首先在实例自身查找,如果找到了就不会再去原型链上查找。
- 代码示例:
function Animal() {}
Animal.prototype.species ='mammal';
let dog = new Animal();
Object.defineProperty(dog,'species', {
configurable: false
});
// 在原型链上修改species属性
Animal.prototype.species = 'new mammal';
console.log(dog.species); // 输出'mammal',不会受到原型链修改的影响