tra*_*vis 20 javascript jquery jslint jquery-plugins new-operator
我正在研究jQuery的插件,我收到了这个JSLint错误:
Problem at line 80 character 45: Do not use 'new' for side effects.
(new jQuery.fasterTrim(this, options));
我没有太多运气找到有关此JSLint错误或new可能有任何副作用的信息.
我试过谷歌搜索 "不要使用'新'副作用." 得到0结果.Binging给了我2个结果,但他们都只引用了JSLint源代码.希望这个问题会改变这一点.:-)
更新#1: 以下是上下文的更多来源:
  jQuery.fn.fasterTrim = function(options) {
    return this.each(function() {
      (new jQuery.fasterTrim(this, options));
    });
  };
更新#2: 我使用Starter jQuery插件生成器作为我的插件的模板,其中包含该代码.
Elz*_*ugi 15
JsLint本身就是你的理由:
构造函数是旨在与新前缀一起使用的函数.新前缀基于函数的原型创建一个新对象,并将该对象绑定到函数的隐含此参数.如果忽略使用新前缀,则不会创建新对象,并且这将绑定到全局对象.这是一个严重的错误.
JSLint强制执行构造函数为初始大写的名称的约定.除非具有新的前缀,否则JSLint不希望看到具有初始大写名称的函数调用.JSLint不期望看到与名称不以初始大写开头的函数一起使用的新前缀.这可以使用newcap选项进行控制.
JSLint不希望看到包装器形成新的Number,new String,new Boolean.
JSLint不期望看到新的Object(而是使用{}).
JSLint不希望看到新的数组(改为使用[]).
Travis,我是Starter网站背后的开发人员.
@Pointy击中了头部.以这种方式编写Starter代码的原因是因为我们确实需要一个新对象,所以我们不需要在那时存储对它的引用.
只需更改命令即可
(new jQuery.fasterTrim(this, options)); 
至
var fT = new jQuery.fasterTrim(this, options);
你会发现安抚JSLint.
Starter插件设置遵循jQuery UI模式,该模式存储data对元素集合中对象的引用.所以这就是发生的事情:
data:$(el).data('FasterTrim', this)返回的对象没有用处,因此没有var声明.我将研究更改声明和清理输出以开箱即用的JSLint.
更多背景:
使用存储对象的好处data是我们可以随时通过调用以下方式访问对象:$("#your_selector").data('FasterTrim').但是,如果你的插件不需要在流中途访问(意思是,它在一次调用中设置并且不提供将来的交互),则不需要存储引用.
如果您需要更多信息,请告诉我.
这是抱怨,因为你打电话给"新"但随后扔掉了退回的物品,我敢打赌.为什么该代码使用"新"?换句话说,为什么不是这样
jQuery.fasterTrim(this, options);
编辑确定,"Starter"工具生成代码,因为它确实需要创建一个新对象,是的,它确实是利用副作用."Starter"生成的构造函数代码使用jQuery"data"工具存储对受影响元素上的新对象的引用.
您正在使用new执行某些操作而不是创建对象并将其返回.JSLint认为这是无效的使用new.
你应该像这样使用它:
var x = new SomeConstructor();
或者像这样执行一些操作:
SomeMethod();
但是永远不要用new来执行这样的动作:
new SomeCosntructor(args);
这样做被认为是new用于副作用,因为您没有使用它来创建对象.
| 归档时间: | 
 | 
| 查看次数: | 5403 次 | 
| 最近记录: |