我有一个方法,其主要目的是在 DOM 对象上设置属性
function (el) {
el.expando = {};
}
我使用 AirBnB 的代码风格,这使得 ESLint 抛出一个no-param-reassign
error:
错误分配给函数参数“el”no-param-reassign
如何操作作为参数传递的 DOM 对象,同时符合 AirBnB 的代码风格?
有人建议使用/* eslint react/prop-types: 0 */
指的是另一个问题 https://stackoverflow.com/questions/30948970/how-to-disable-eslint-react-prop-types-rule-in-a-fil但如果我没记错的话,这适用于 React,但不适用于本机 DOM 操作。
我也不认为改变代码风格是一个答案。我相信使用标准样式的好处之一是在项目之间拥有一致的代码,并且随意更改规则感觉就像滥用像 AirBnB 这样的主要代码样式。
作为记录,我在 GitHub 上询问了 AirBnB,他们认为在这些情况下该怎么做在第 #766 期中 https://github.com/airbnb/javascript/issues/766.
As 本文解释了 https://spin.atomicobject.com/2011/04/10/javascript-don-t-reassign-your-function-arguments/,这个规则是为了避免改变arguments object https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments。如果您分配给一个参数,然后尝试通过arguments
对象,它可能会导致意想不到的结果。
您可以使用另一个变量来获取对 DOM 元素的引用,然后对其进行修改,从而保持规则不变并保持 AirBnB 样式:
function (el) {
var theElement = el;
theElement.expando = {};
}
在JS中对象(包括DOM节点)都是通过引用传递的,所以这里el
and theElement
是对同一个 DOM 节点的引用,但修改theElement
不会改变arguments
对象自arguments[0]
仍然只是对该 DOM 元素的引用。
这种方法在规则的文档 http://eslint.org/docs/rules/no-param-reassign:
此规则的正确代码示例:
/*eslint no-param-reassign: "error"*/
function foo(bar) {
var baz = bar;
}
就我个人而言,我只会使用"no-param-reassign": ["error", { "props": false }]
接近提到的其他几个答案。修改作为参数传递的对象的属性不会更改对象引用,因此不应遇到此规则试图避免的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)