Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将new与函数表达式一起使用?_Javascript - Fatal编程技术网

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

Javascript 为什么要将new与函数表达式一起使用?,javascript,Javascript,在查看一些源代码时,我发现: require["./helpers"] = new function() {...}; 为什么这里使用了新的?当我在JSLint上运行这个时 奇怪的构造。删除“新建”。 那么这只是一种风格,一种个人喜好吗?或者这背后有什么原因?这是一种创建对象的方法,允许在创建过程中使用此 这在实例化过程中提供了一些对象文字语法不允许的对对象的直接引用 var o = new function() { this.num = Math.random(); this

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

require["./helpers"] = new function() {...};
为什么这里使用了
新的
?当我在JSLint上运行这个时

奇怪的构造。删除“新建”。


那么这只是一种风格,一种个人喜好吗?或者这背后有什么原因?

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

这在实例化过程中提供了一些对象文字语法不允许的对对象的直接引用

var o = new function() {
    this.num = Math.random();
    this.isLow = this.num < .5; // you couldn't reference num with literal syntax
};
var o=新函数(){
this.num=Math.random();
this.isLow=this.num<.5;//无法使用文字语法引用num
};
对象文字版本需要如下所示:

var o = {
    num: Math.random()
};
o.isLow = o.num < .5;
var o={
num:Math.random()
};
o、 isLow=o.num<.5;
因此,匿名函数基本上用作临时构造函数。我们可以同样轻松地使用命名构造函数,但因为我们并不真正关心构造函数,所以我们只使用“一次性”构造函数


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

它基本上做了与返回公共接口的IIFE相同的事情(具有可访问函数私有范围的公共属性/方法的对象)在某种程度上,除了那些在构建过程中真正绝望地想使用
这个
的人,他们不会费心使用
调用
绑定
应用
,或者干脆返回一个常规内联对象

实际上,当IIFEs和构造函数都以预期的方式使用时,它们之间存在一些差异……但在本例中,从高级(即:就您的程序而言)来看,无论哪种方式,最终返回值都没有本质上的差异