为什么new与函数表达式一起使用?

时间:2012-10-02 01:08:17

标签: javascript

在查看一些源代码时,我发现了这个:

require["./helpers"] = new function() {...};

为什么在这里使用new?当我在JSLint上运行时,我得到了

Weird construction. Delete 'new'.

这只是一种风格,个人偏好吗?或者这背后有什么东西?

2 个答案:

答案 0 :(得分:6)

这是一种创建对象的方法,允许在创建过程中使用this

这提供了在实例化期间对象文字语法不允许的对象的直接引用。

var o = new function() {
    this.num = Math.random();
    this.isLow = this.num < .5; // you couldn't reference num with literal syntax
};

对象文字版本需要如下所示:

var o = {
    num: Math.random()
};
o.isLow = o.num < .5;

因此匿名函数基本上用作临时构造函数。我们可以很容易地使用命名的构造函数,但由于我们并不真正关心构造函数,所以我们只使用“一次性”函数。

当然,因为它是一个函数,它会创建一个局部变量作用域,所以如果你将任何函数分配给新对象,它们就能够关闭局部变量。

答案 1 :(得分:0)

它基本上和IIFE做同样的事情,它返回某种公共接口(具有公共属性/方法的对象,可以访问函数的私有范围),除了那些 的人真的很糟糕 想在构建过程中使用this,并且不能打扰使用callbindapply,或者只是扁平化返回一个常规的内联对象。

当两者都以预期的方式使用时,IIFE和构造函数之间存在一些差异......但在这种情况下,最终的返回值确实没有任何本质上的不同无论哪种方式,从高级别开始(即:就您的计划而言应该关注)。