- 分析:
- 当在
Child
实例上尝试修改parentProp
属性时,由于parentProp
在Parent.prototype
上设置为不可写,所以直接修改不会生效。JavaScript会沿着原型链查找属性,因为Child
继承自Parent
,所以会找到Parent.prototype
上的parentProp
。但由于其不可写特性,修改操作被忽略。
- 代码实现:
// 定义Parent构造函数
function Parent() {}
// 在Parent的原型对象上定义parentProp属性,并设置为不可写
Object.defineProperty(Parent.prototype, 'parentProp', {
value: 'parent value',
writable: false
});
// 定义Child构造函数,继承自Parent
function Child() {
Parent.call(this);
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
// 创建Child实例
const child = new Child();
// 尝试修改parentProp属性
child.parentProp = 'new value';
// 输出parentProp属性
console.log(child.parentProp);
- 解释:
- 首先定义了
Parent
构造函数,并使用Object.defineProperty
在其原型对象上定义了parentProp
属性,设置writable
为false
,表示不可写。
- 然后定义
Child
构造函数,通过Object.create
实现继承。
- 创建
Child
实例child
,尝试修改parentProp
属性为'new value'
。
- 最后输出
child.parentProp
,会发现输出的仍然是'parent value'
,说明由于parentProp
在原型上不可写,修改操作未成功。