我正在研究jQuery的插件,我收到此JSLint错误:
Problem at line 80 character 45: Do not use 'new' for side effects.
(new jQuery.fasterTrim(this, options));
我没有太多运气找到有关此JSLint错误或new
可能产生的任何副作用的信息。
我已尝试Googling表示“请勿使用'new'作副作用。”得到0结果。 Binging给了我2个结果,但它们都只引用了JSLint源代码。希望这个问题会改变这一点。 : - )
更新#1: 以下是上下文的更多来源:
jQuery.fn.fasterTrim = function(options) {
return this.each(function() {
(new jQuery.fasterTrim(this, options));
});
};
更新#2: 我使用Starter jQuery plug-in generator作为插件的模板,其中包含该代码。
答案 0 :(得分:15)
JsLint itself告诉你原因:
构造函数是函数 旨在与新的一起使用 字首。新前缀创建一个新的前缀 基于函数的对象 原型,并绑定该对象 函数隐含了这个参数。 如果你忽略使用新的前缀, 不会有新的对象和这个 将绑定到全局对象。 这是一个严重的错误。
JSLint强制执行约定 构造函数被赋予名称 初始大写。 JSLint呢 不期望看到一个功能 以初始大写调用 名称,除非它有新的前缀。 JSLint不期望看到新的 前缀用于名称的函数 不要以初始大写开头。 这可以通过newcap来控制 选项。
JSLint不希望看到 包装器形成新的Number,new String, 新布尔值。
JSLint不期望看到新的 对象(改为使用{})。
JSLint不期望看到新的 数组(改为使用[])。
答案 1 :(得分:7)
Travis,我是Starter
网站背后的开发人员。
只需更改
中的命令即可(new jQuery.fasterTrim(this, options));
到
var fT = new jQuery.fasterTrim(this, options);
将安抚您发现的JSLint。
Starter插件设置遵循jQuery UI模式,该模式存储对元素的data
集合中对象的引用。所以这就是发生的事情:
data
将实例附加到DOM元素:$(el).data('FasterTrim', this)
返回的对象没有用处,因此没有var
声明。 我将研究更改声明并清理输出以便开箱即可传递JSLint。
多一点背景:
使用data
存储对象的好处是我们可以随时通过调用$("#your_selector").data('FasterTrim')
来访问该对象。但是,如果您的插件不需要在流中途访问(意思是,它在一次调用中设置并且不提供将来的交互),则不需要存储引用。
如果您需要更多信息,请与我们联系。
答案 2 :(得分:6)
这是在抱怨,因为你正在打电话给“新”但随后扔掉了退回的物品,我敢打赌。为什么该代码使用“新”?换句话说,为什么不只是
jQuery.fasterTrim(this, options);
编辑好吧,好吧,“Starter”工具以这种方式生成代码,因为它确实需要创建一个新对象,是的,它确实是利用副作用。 “Starter”生成的构造函数代码使用jQuery“data”工具生成对受影响元素上的新对象的引用。
答案 3 :(得分:5)
您正在使用new
执行某些操作,而不是创建对象并将其返回。 JSLint认为这是对new
的无效使用。
您应该像这样使用它:
var x = new SomeConstructor();
或执行以下操作:
SomeMethod();
但永远不要用new来执行这样的动作:
new SomeCosntructor(args);
这样做会被视为使用new
副作用,因为您没有使用它来创建对象。
答案 4 :(得分:2)
基本上JavaScript往往是一个缓慢的野兽,因此创建一个新对象只是为了调用一个函数是非常低效的。无论如何,这个功能都是静态的。
$.fasterTrim(this, options);
答案 5 :(得分:0)
来自jQuery fasterTrim source code:
* Usage:
*
* $(element).fasterTrim(options); // returns jQuery object
* $.fasterTrim.trim(" string ", options); // returns trimmed string
要回答这个问题,“不要使用新的副作用”意味着:
不要使用new作为什么 构造函数将对其参数执行操作 但要创建一个对象,副作用 在建设者中是baaaad!