与JSHint相反,Backbone.js"使用新的副作用"吗?

Ben*_*rts 7 javascript jslint backbone.js

我有一个自包含的Backbone.View实现MainControllerView,可以处理自己(即,没有理由对它进行外部引用.).如果,在我的主要bootstrapper函数中,我会这样做:

$(function() {
  new MainControllerView();
});
Run Code Online (Sandbox Code Playgroud)

JSLint/JSHint抱怨我使用"new for side effects".阅读此警告表示上述内容被视为有臭味的代码.替代方法是不使用new,只是将构造函数作为函数调用,或者将其赋值给变量.但是,MainControllerView()直接调用我的函数而不使用new主干代码中的引发错误,所以这显然不是一个选项.对我来说似乎完全错误,以下是更好的代码:

$(function() {
  var instantGarbage = new MainControllerView();
}); 
Run Code Online (Sandbox Code Playgroud)

事实上,这会引发一个不同的JSLint警告"instantGarbage已定义但从未使用过".显然,如果我这样做,我就会感到危险,如果不这样做,我就会感到危险.那么,是否有一种不同的"正确"方式来处理这类事情?以某种方式创建即时垃圾变量是"更好的代码"替代方案吗?Backbone.js是否以非Crockford批准的方式利用"new"关键字?或者这只是"规则"的例外之一?

tko*_*one 10

new没有害处.一遍又一遍地重复.

如果使用正确,new效果很好.就像Backbone一样.

JSLint是一个非常自以为是的短信; 仅仅因为克罗克福德说某事不好或不应该使用,并不意味着这是一个普遍的事实.此外,他背后的推理更多的是它掩盖了更经典的外观背后的Javascript原型性质.

但是,如果使用JSHint之类的工具,则可以配置这些警告.

我更喜欢你的两个声明中的后者

$(function() {
  var instantGarbage = new MainControllerView();
}); 
Run Code Online (Sandbox Code Playgroud)

您可以使用unused: falseJSHint选项来禁止此操作.

或者你可以nonew: false改为设置.

这些可以在一个.jshintrc或甚至每个文件中设置注释:

/* jshint unused: false */
Run Code Online (Sandbox Code Playgroud)

在文件的顶部.这将为文件关闭它.您甚至可以针对特定范围禁用它.

查看jshint文档