Object()和new Object()生成的实例对象有区别吗?

作者站长头像
站长
· 阅读数 6

通过Object()好像也能生成一个实例化的对象,和new没什么两样。请问和使用new关键字比起来有什么区别呢?单纯是new更符合规范,其他的都一致吗?还是说Object()内部就已经new过了再返回的。

回复
1个回答
avatar
test
2024-07-07

按照 ecma262 的描述,他们的效果是一样的,都会走向下面的 2 。

至于为什么没有走 1 ,原因就不一样了。Object() 的 NewTarget 是 undefined (NewTarget 只有在 new 的时候存在,是被 new 的对象),而 new Object() 的 NewTarget 是 Object,它是 activa funciton (当前正在运行的函数)。

20.1.1.1 Object ( [ value ] )

When the Object function is called with optional argument value, the following steps are taken:

  1. If NewTarget is neither undefined nor the active function, thena. Return ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%").
  2. If value is undefined or null, return OrdinaryObjectCreate(%Object.prototype%).
  3. Return ! ToObject(value).
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容