【问题标题】:Why I cannot create a pure object via a function-constructor in Javascript?为什么我不能通过 Javascript 中的函数构造函数创建纯对象?
【发布时间】:2021-06-30 05:00:05
【问题描述】:

我有一个关于 Javascript 继承的问题。我想创建一个纯对象。我可以使用Object.create(null) 来做到这一点。但我决定通过构造函数来创建它。

let User = function () {};

User.prototype = null;

所以现在我可以预期,使用new User() 语法创建的每个对象都没有任何原型。 但是

let user = new User();

console.log(user.__proto__ == Object.prototype); //true

为什么这里不为空?为什么这里不纯净?我想我错过了一些重要的东西。

【问题讨论】:

标签: javascript inheritance constructor prototype


【解决方案1】:

现在我可以预料,使用new User() 语法创建的每个对象都没有任何原型。

是的,这是一个合理的期望,但 JS 不是那样工作的。如果构造函数的 .prototype 不是对象,则 new 运算符回退到从 Object.prototype 创建对象。只有 ES5 引入了一种方法来创建从 null 和 Object.create 继承的纯对象。

【讨论】:

    【解决方案2】:

    proto getter 函数公开对象内部 [[Prototype]] 的值。对于使用对象字面量创建的对象,此值为 Object.prototype。比较对象 "user" 的内部 [[Prototype]] 的值:

           console.log(user.__proto__ == Object.prototype.__proto__); //false
    

    enter image description here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多