jshint和Function()获取:调用构造函数时缺少'new'前缀

时间:2014-12-09 13:48:05

标签: javascript jshint

我想使用" noop"函数(我的意思是,一个不做任何事情的函数,仅用于模型目的)。所以我写道:

var noop = Function();

但是当我对文件运行 jshint 时,我收到以下错误:

Missing 'new' prefix when invoking a constructor.

当我为Function()更改Function.prototype时,此错误消失了,但我更喜欢第一个。

为什么会出现这种错误?我怎样才能阻止这个提示?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您的表达实际上与

相同
var noop = new Function();

var noop = new Function;

您可以看到每次运行Function() === Function()

都会创建一个新对象

我看到在生产中使用的最短和最安全的替代方案是:

var noop = Number;

jshint应该很酷这个。优点是每次使用时都不会创建新对象。

更新的 只是为了完整性,jshint抱怨因为调用构造函数(大写的第一个字母按惯例意味着构造函数)而没有新的可能是危险的,因为这些函数中的this在ES3中是window并且对{的任何更改{1}}修改全局对象。