我有一个自包含的Backbone.View实现,称为MainControllerView,它可以处理自己(即,没有理由对它进行外部引用.).如果,在我的主要bootstrapper函数中,我会这样做:
$(function() { new MainControllerView(); });
JSLint / JSHint抱怨我使用“new for side effects”.阅读此警告表示上述内容被视为有臭味的代码.替代方法是不使用new,只是将构造函数作为函数调用,或者将其赋值给变量.但是,直接将我的MainControllerView()作为函数调用而不使用new会在主干代码中引发错误,因此这显然不是一个选项.对我来说似乎完全错误,以下是更好的代码:
$(function() { var instantGarbage = new MainControllerView(); });
实际上,这引发了一个不同的JSLint警告“instantGarbage已定义但从未使用过”.显然,如果我这样做,我就会受到威胁,如果我不这样做,我就会受到威胁.那么,是否有一种不同的“正确”方式来处理这类事情?以某种方式创建即时垃圾变量是“更好的代码”替代方案吗? Backbone.js是否以非Crockford批准的方式利用“new”关键字?或者这只是“规则”的例外之一?
解决方法
新的没有害处.一遍又一遍地重复.
如果使用正确,新的工作非常好.就像Backbone一样.
JSLint是一个非常自以为是的短信;仅仅因为克罗克福德说某事不好或不应该使用,并不意味着这是一个普遍的事实.此外,他背后的推理更多的是它在一个更古典的外观背后隐藏了Javascript原型性质.
但是,如果使用JSHint之类的工具,则可以配置这些警告.
我更喜欢你的两个声明中的后者
$(function() { var instantGarbage = new MainControllerView(); });
您可以使用JSHint的unused:false选项来禁止此操作.
或者你可以设置nonew:false.
这些可以在.jshintrc中设置,甚至可以在每个文件中设置注释:
/* jshint unused: false */