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

为何用Object.create()创建的对象显示为空却存在属性?属性存储在哪?

JavaScript对象属性显示问题解答

问题代码与现象

let company = {
  companyName: "DeedaZaib"
}

let emp1 = Object.create(company, {
  name: {
    value: "Hasnain"
  }
})

console.log(emp1.name)
//emp1.name gives => Hasnain
console.log(emp1)
//emp1 gives      => {}
//I expect emp1 to be as {name: 'Hasnain'}

执行后console.log(emp1.name)能输出Hasnain,但console.log(emp1)却显示{},预期emp1应该是{name: 'Hasnain'}。


原因分析

你用Object.create()第二个参数定义属性时,默认配置的enumerable(可枚举性)为false。控制台打印对象时,只会显示可枚举的属性,所以name属性不会出现在输出结果里,但它确实存在于对象自身。

如果要让name属性在控制台打印时显示,需要手动把enumerable设为true:

let emp1 = Object.create(company, {
  name: {
    value: "Hasnain",
    enumerable: true // 添加可枚举配置
  }
})

此时再执行console.log(emp1),就会输出{name: 'Hasnain'}。

属性存储位置

emp1.name是存储在emp1对象自身的属性集合里的,并不是继承自company原型。你可以通过以下方法验证:

  • 执行emp1.hasOwnProperty('name')会返回true,说明这是对象自身的属性;
  • 执行Object.getOwnPropertyNames(emp1)会返回['name'],能获取到对象自身所有属性(包括不可枚举的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:34:56