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

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

阅读 1.8k
2 个回答

按照 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, then
    a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%Object.prototype%").
  2. If value is undefined or null, return OrdinaryObjectCreate(%Object.prototype%).
  3. Return ! ToObject(value).

即使不用 new,构造函数也会自动执行,如果不是其本身,则会自动调用返回其本身。

为什么会有这种模式呢?因为 Object 是 javascript 内置的对象,javascript 语言规范的制定者担心有的新手忘写 new,所以就给加了个这个模式,还有 Array,Regex 等,使用对构造函数时建议使用 new 去表示其意义。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题