【问题标题】:Object doesn't inherit properties and values [duplicate]对象不继承属性和值[重复]
【发布时间】:2020-11-22 02:28:28
【问题描述】:

我定义了一个对象,当我实例化它时,实例不包含父对象的属性和值。

const myObject = {
    myNumbers: [7,32,51,2,0,9],
    myName: "John",
    myLastName: undefined,
    age: 26
};

const objectInstance = Object.create(myObject);

console.log(myObject);          //{myNumbers: Array(6), myName: "John", myLastName: undefined, age: 26}
console.log(objectInstance);    //{}

objectInstance 记录一个空对象。我期待看到日志窗口中显示的所有属性和值。我哪里错了?

【问题讨论】:

  • console.log 只显示自己的个可编号属性的子集是正常的。
  • 您使用什么开发工具?在 Firefox 中,您只需单击箭头即可展开对象,它会显示 <prototype>: Object { myNumbers: (6) […], myName: "John", age: 26, … }。 Chrome 显示一个__proto__,它进一步扩展为继承属性的多行列表。
  • 我使用 VS Code 作为编辑器(带有 LiveServer 插件)和 Firefox 83.0 作为浏览器。我可以看到原型值,我假设该对象是空白的,因为它显示为 {} 而不是在其他地方显示继承的属性。

标签: javascript


【解决方案1】:

当你console.log一个对象时,它只显示对象自身的属性。但是,如果您想查看继承的属性,可以在控制台中展开__proto__ 属性。

尝试记录:

console.log(myObject);                               // {myNumbers: Array(6), myName: "John", myLastName: undefined, age: 26}
console.log(objectInstance);                         // {}
console.log(Object.getPrototypeOf(objectInstance));  // {myNumbers: Array(6), myName: "John", myLastName: undefined, age: 26}

【讨论】:

  • __proto__ 已弃用。现代替代品是Object.getPrototypeOfconsole.dir 是一个更好的选择。正如当前在主流浏览器中实现的那样,console.log,更具体地说,显示了自己的可枚举属性的子集。
  • 谢谢。用Object.getPrototypeOf 而不是__proto__ 更新了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
相关资源
最近更新 更多