基于MDN 上关于新操作符如何工作的这些规范:
构造函数返回的对象成为整个 new 表达式的结果。如果构造函数没有明确返回对象,则使用在步骤 1 中创建的对象。(通常构造函数不返回值,但如果他们想覆盖正常的对象创建过程,他们可以选择这样做。)
我相信 new 运算符只会在未提供返回值的情况下覆盖返回值。然而,它似乎总是如此,你永远无法覆盖它。
例如
function test() { return 1; }
new test() // returns {} and not 1
Run Code Online (Sandbox Code Playgroud)
有人可以举例说明情况并非如此,例如他们在文档中所指的吗?
您只能使用非原始值覆盖结果。
与原始
function test() { this.bar = '42'; return 1; }
console.log(new test()) // {}Run Code Online (Sandbox Code Playgroud)
有对象,无原语
function test() { this.bar = '42'; return { foo: 'bar' }; }
console.log(new test()) // { foo: 'bar' }; Run Code Online (Sandbox Code Playgroud)
带数组,不带基元
function test() { this.bar = '42'; return [42]; }
console.log(new test()) // [42]; Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |