2017-02-03 58 views
1

基于这些规格在MDN关于新的运营商是如何工作的:Javascript new operator * always * overrides return value?

由构造函数返回的对象成为 的全新表达的结果。如果构造函数不显式返回对象,则使用步骤1中创建的对象代替 。 (通常构造函数不返回值,但可以 选择这样做,如果他们想覆盖正常的对象创建 过程。)

我带领相信,新的运营商只覆盖了回归如果没有提供,则为价值。然而,它似乎总是这样做,你可以从来没有重写它。

例如

function test() { return 1; } 
new test() // returns {} and not 1 

有人可以给一个例子不是这种情况,比如他们指的是在文档?

回答

3

只能用非原始值覆盖结果。

随着原始

function test() { this.bar = '42'; return 1; } 
 
console.log(new test()) // {}

随着对象,而不原始

function test() { this.bar = '42'; return { foo: 'bar' }; } 
 
console.log(new test()) // { foo: 'bar' };

随着阵列,没有原语

function test() { this.bar = '42'; return [42]; } 
 
console.log(new test()) // [42];

相关问题