面试题答案
一键面试- 实现代码如下:
function Animal() {} function Dog() { Object.preventExtensions(this); } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog;
- 原理解释:
- 自有属性不可删除:在
Dog
构造函数内部,使用Object.preventExtensions(this)
方法。Object.preventExtensions
会阻止新属性添加到对象中,并且使得对象现有的自有属性不能通过delete
操作符删除,从而满足了Dog
实例自有属性不能被删除的要求。 - 原型链属性正常操作:通过
Dog.prototype = Object.create(Animal.prototype)
将Dog
的原型设置为Animal
原型的一个新实例。这样Dog
实例的原型链属性可以正常访问和操作,因为Object.preventExtensions
只作用于实例本身的自有属性,不会影响原型链上的属性。 - 不影响
Animal
构造函数创建实例的正常可扩展性:因为Animal
构造函数本身没有受到任何特殊处理,其创建的实例对象保持正常的可扩展性,Animal
实例可以正常添加和删除自有属性。
- 自有属性不可删除:在