静态方法上的新关键字 Promise.resolve
Keyword new on static method Promise.resolve
我在 Promise.resolve
上看到 'erroneous' 调用 new
关键字,但我很惊讶它有效!有人可以向我解释发生了什么,如果它与省略 new
关键字有任何不同吗?
new Promise.resolve(1)
查看 operator precedence (specifically Member Access, Function Call and new(without argument list)) and new
keyword 的 MDN 文档,上面不应该抛出错误,因为我假设表达式的计算方式如下:
new (Promise.resolve(1))
我想我在这里遗漏了一些东西(很明显)。提前致谢!
注意:使用蓝鸟库2.x
new
实际上只是创建一个新对象并调用给定的函数并将 this
设置为该对象。如果 Promise.resolve
在内部根本不使用 this
,那么这没有什么区别。此外,如果给定的构造函数 returns 是对象本身,则由 new
创建的隐式对象将被丢弃并使用返回的对象。
因此,new
引入了一个新的中间对象,该对象从 resolve
returns 到 Promise
后被丢弃,并将上下文设置为另一个对象,该对象不'好像有什么影响。
Here is a very good answer describing how the new
运算符在 JavaScript.
中工作
本质上发生的事情是 Promise.resolve
被视为构造函数,但是构造的对象被丢弃,因为 Promise.resolve
returns 某些东西(您的承诺对象)。
在这种情况下,new
没有害处,因为 Promise.resolve
不依赖于对 this
的访问,如果您愿意,可以简单地将其删除。
相反,将 new
添加到实例方法调用将导致非常奇怪的行为:
let x = Promise.resolve()
new x.then(() => console.log("Resolved")) // Will almost certainly throw an error
我在 Promise.resolve
上看到 'erroneous' 调用 new
关键字,但我很惊讶它有效!有人可以向我解释发生了什么,如果它与省略 new
关键字有任何不同吗?
new Promise.resolve(1)
查看 operator precedence (specifically Member Access, Function Call and new(without argument list)) and new
keyword 的 MDN 文档,上面不应该抛出错误,因为我假设表达式的计算方式如下:
new (Promise.resolve(1))
我想我在这里遗漏了一些东西(很明显)。提前致谢!
注意:使用蓝鸟库2.x
new
实际上只是创建一个新对象并调用给定的函数并将 this
设置为该对象。如果 Promise.resolve
在内部根本不使用 this
,那么这没有什么区别。此外,如果给定的构造函数 returns 是对象本身,则由 new
创建的隐式对象将被丢弃并使用返回的对象。
因此,new
引入了一个新的中间对象,该对象从 resolve
returns 到 Promise
后被丢弃,并将上下文设置为另一个对象,该对象不'好像有什么影响。
Here is a very good answer describing how the new
运算符在 JavaScript.
本质上发生的事情是 Promise.resolve
被视为构造函数,但是构造的对象被丢弃,因为 Promise.resolve
returns 某些东西(您的承诺对象)。
在这种情况下,new
没有害处,因为 Promise.resolve
不依赖于对 this
的访问,如果您愿意,可以简单地将其删除。
相反,将 new
添加到实例方法调用将导致非常奇怪的行为:
let x = Promise.resolve()
new x.then(() => console.log("Resolved")) // Will almost certainly throw an error