Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否使用Backbone.js;使用新的“副作用”;与JSHint相反?_Javascript_Backbone.js_Jslint - Fatal编程技术网

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
的情况下,直接作为函数调用my
MainControllerView()
,会在主干代码中引发错误,因此这显然不是一个选项。在我看来,以下是更好的代码是完全错误的:

$(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中(我一定是在配置中禁用了它,然后忘了)。