Javascript 是否使用Backbone.js;使用新的“副作用”;与JSHint相反?
我有一个独立的Javascript 是否使用Backbone.js;使用新的“副作用”;与JSHint相反?,javascript,backbone.js,jslint,Javascript,Backbone.js,Jslint,我有一个独立的主干。视图实现称为MainControllerView,它可以自行处理(即,没有理由有外部引用)。如果,在我的主引导程序功能中,我像这样启动: $(function() { new MainControllerView(); }); JSLint/JSHint抱怨我正在使用“新的副作用”。阅读此警告表明上述代码被认为是有臭味的代码。替代方法是根本不使用new,而是将构造函数作为函数调用,或者将其分配给变量。但是,在不使用new的情况下,直接作为函数调用myMainContro
主干。视图
实现称为MainControllerView
,它可以自行处理(即,没有理由有外部引用)。如果,在我的主引导程序功能中,我像这样启动:
$(function() {
new MainControllerView();
});
JSLint/JSHint抱怨我正在使用“新的副作用”。阅读此警告表明上述代码被认为是有臭味的代码。替代方法是根本不使用new,而是将构造函数作为函数调用,或者将其分配给变量。但是,在不使用new
的情况下,直接作为函数调用myMainControllerView()
,会在主干代码中引发错误,因此这显然不是一个选项。在我看来,以下是更好的代码是完全错误的:
$(function() {
var instantGarbage = new MainControllerView();
});
事实上,这引发了一个不同的JSLint警告“InstantBarage已定义,但从未使用过”。显然,如果我这样做,我会受到威胁,如果我不这样做,我会受到威胁。那么,有没有其他“正确”的方法来处理这类事情呢?以某种方式创建即时垃圾变量是“更好的代码”替代方案吗?Backbone.js是否以非Crockford批准的方式利用“new”关键字?或者这只是“规则”的例外之一?
新的
是无害的。重复一遍又一遍
如果使用正确,new
效果很好。就像脊梁骨一样
JSLint是一个非常固执己见的linter;Crockford说某些东西不好或不应该使用,并不意味着这是一个普遍的真理。此外,他在其背后的推理更多的是掩盖了更为经典的oo外观背后的Javascript原型本质
但是,如果使用JSHint之类的工具,则可以配置这些警告
我更喜欢你的两个声明中的后一个
$(function() {
var instantGarbage = new MainControllerView();
});
您可以使用JSHint的unused:false
选项来抑制这种情况
或者您可以改为设置nonew:false
这些可以在.jshintrc
中设置,甚至可以在带有注释的每个文件中设置:
/* jshint unused: false */
在文件的顶部。这将为文件关闭它。您甚至可以针对特定范围禁用它
首先,克罗克福德是一个有观点的人;不多不少。许多人不同意他的许多观点,这就是为什么JSHint库比JSLint更受欢迎的原因,尽管JSLint有优先的优势
我强烈建议您切换到JSHint,这样您就可以不再担心Crockford所关心的那些实际上不会让您的代码变得更糟的愚蠢事情。从其他人第一次阅读您的代码的角度来看。构造函数通常用于创建新对象,然后对其进行操作。从这个角度看,您似乎只是创建了一个新视图,并立即将其丢弃,而不做任何操作 是的,不管有没有JS[L/H]int,这都是一种“糟糕的代码味道”。看看这篇文章——
可能的重复不是真正的重复。我不是在问new本身是否有害,我是在问在不给变量赋值的情况下使用它是否有问题。我实际上使用了JSHint,这是一个在fork中幸存下来的警告。当然,我可以在JSHint中禁用它,我会禁用的,但是我想在禁用之前有一个更好的理解。谢谢哦,我没意识到有人把它放到了JSHint中(我一定是在配置中禁用了它,然后忘了)。