12

为什么我会收到这些错误?

第 329 行字符 60 处的问题:不要使用“新”来表示副作用。

new widget.StyledDropdown(dojo.byId("sTitle"));

第 330 行字符 61 处的问题:不要使用“新”来表示副作用。

new widget.StyledDropdown(dojo.byId("sSuffix"));

第 336 行字符 57 处的问题:不要使用“新”来表示副作用。

true,{shortenName : true,maxChars : 20});

第 338 行字符 129 处的问题:不要使用“新”来表示副作用。

new widget.StyledDropdown(dojo.byId("sCountry"),USPS.Address.countrySw...

4

3 回答 3

23

您没有存储对新创建对象的引用,这是代码异味。

JSLint 是在说“您正在创建一些对象但立即丢弃它们;您这样做的唯一可能原因是创建对象的行为有副作用,这很奇怪。”

您可以通过防止构造函数产生副作用(这意味着找到一些其他方式来做他们正在做的事情,例如通过将该代码移动到普通函数中)或通过存储对新的引用来丢失警告-创建的对象(即使在您丢弃的临时局部变量中)。

于 2010-09-10T16:10:08.230 回答
2

重新考虑策略是最好的,但更常见的是,在开发周期中处理技术债务不是一种选择。

如果您使用 JSHint,您可以根据具体情况覆盖此选项。在有问题的代码范围内添加此 jshint 注释。

/* jshint -W031 */
new widget.StyledDropdown(dojo.byId("sTitle"));
new widget.StyledDropdown(dojo.byId("sSuffix"));
...

内联配置是功能范围的。因此,仍然会检查评论范围之外的任何内容。

于 2016-10-12T16:25:40.413 回答
0

我使用以下解决方案。它依赖于使用new关键字和覆盖 ESLint - 但覆盖范围缩小到包含该类的文件。

重要的是该类是私有的,并且导出的是一个普通函数。然后当你在代码中使用函数时,很明显它不是一个类——它只是一个常规函数。

这样,您仍然可以使用类语法而无需添加新的代码气味。

class SideEffects {
  constructor() {
  
  }
  // ...
}

export function addSideEffects() {
  // eslint-disable-next-line no-new
  new SideEffects();
}
于 2021-12-08T07:39:20.417 回答