You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何删除Object.create创建对象的属性不生效?

为什么删除Emp1的company属性后它仍然存在?

这是因为你没搞懂Object.create的工作机制和delete操作符的作用范围:

  1. Object.create(Employee)的本质
    用这个方法创建的Emp1对象,自身并没有company属性——这个属性是存在于它的原型对象(也就是你定义的Employee)上的。Emp1只是通过原型链继承了这个属性的访问权。

  2. delete操作符的作用限制
    delete只能删除对象自身拥有的属性。当你执行delete Emp1.company时,JS发现Emp1自己根本没有这个属性,所以这个删除操作不会产生任何效果。

之后你访问Emp1.company时,JS会顺着原型链向上查找,最终找到原型上的Employee.company,所以控制台依然会输出xyz。

你可以用hasOwnProperty方法验证这一点:

console.log(Emp1.hasOwnProperty('company')); // 输出 false,证明该属性不是Emp1自身的

如果想让Emp1访问不到company,可以参考这两种思路:

  • 直接修改原型上的属性(但会影响所有继承自Employee的对象):
    delete Employee.company;
    console.log(Emp1.company); // 输出 undefined
    
  • 给Emp1自身添加company属性覆盖原型值,后续也可删除这个自身属性:
    Emp1.company = undefined; // 给Emp1添加自身属性,屏蔽原型链查找
    console.log(Emp1.company); // 输出 undefined
    

内容的提问来源于stack exchange,提问作者Vipul Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:47:05