当前位置: 首页 > 知识库问答 >
问题:

在DOM对象上设置属性时如何避免无参数重新分配

爱炯
2023-03-14
function (el) {
  el.expando = {};
}

我使用AirBnB的代码样式,这使得ESLint抛出一个no-参数-resign错误:

分配到函数参数“el”时出错无参数重新分配

如何操作作为参数传递的DOM对象,同时符合AirBnB的代码风格?

有人建议使用/*eslint反应/prop-type: 0*/引用另一个问题,但如果我没有弄错的话,这适用于反应,但不适用于本机DOM操作。

我也不认为改变代码风格是一个答案。我相信使用标准样式的好处之一是在项目之间拥有一致的代码,随意更改规则感觉就像滥用了AirBnB这样的主要代码样式。

为了记录在案,我在GitHub上问了AirBnB,他们认为在第766期的这些情况下该怎么做。

共有3个答案

曾枫
2023-03-14

您可以在您的. eslintrc文件中重写此规则,并为像这样的参数属性禁用它

{
    "rules": {
        "no-param-reassign": [2, { 
            "props": false
        }]
    },
    "extends": "eslint-config-airbnb"
}

此方式规则仍处于活动状态,但不会对属性发出警告。更多信息:http://eslint.org/docs/rules/no-param-reassign

谯乐池
2023-03-14

正如本文所解释的,此规则旨在避免对参数对象进行变异。如果分配给参数,然后尝试通过参数对象访问某些参数,可能会导致意外结果。

您可以通过使用另一个变量来获取对DOM元素的引用,然后修改它来保持规则不变并保持AirBnB样式:

function (el) {
  var theElement = el;
  theElement.expando = {};
}

在JS中,对象(包括DOM节点)是通过引用传递的,所以这里eltheElement是对同一个DOM节点的引用,但是修改theElement不会改变参数对象,因为参数[0]仍然只是对该DOM元素的引用。

该规则的文档中暗示了这种方法:

此规则的正确代码示例:

/*eslint no-param-reassign: "error"*/

function foo(bar) {
    var baz = bar;
}

就我个人而言,我只会使用“no param reassign”:[“error”,{“props”:false}]处理前面提到的几个其他答案。修改参数的属性不会改变该参数所指的内容,也不会遇到此规则试图避免的问题。

仲绍晖
2023-03-14

正如@Mathletics所建议的,您可以通过将其添加到您的来完全禁用该规则。eslintrc.json文件:

"rules": {
  "no-param-reassign": 0
}

或者,您可以禁用专门用于参数属性的规则

"rules": {
  "no-param-reassign": [2, { "props": false }]
}

或者,您可以禁用该函数的规则

/* eslint-disable no-param-reassign */
function (el) {
  el.expando = {};
}
/* eslint-enable no-param-reassign */

还是只为那一行

function (el) {
  el.expando = {}; // eslint-disable-line no-param-reassign
}
 类似资料:
  • 问题内容: 有可能设置的属性元件到从例如一个不同的元件特性或属性。请参阅使.files可设置#2866,将文件上传到HTML表单并提交它之间会发生什么?。 对象具有一个我们可以用它来设置一个属性对象,它是迭代的,但是 仍然被设置为和传递一个具有集,其中是使用上述方法产生一组具有对象集到。 如何将at 和set设置为文件集的数量,其中将文件设置为object的位置? 问题答案: 编辑: 正如 OP

  • 我已经创建了一个类get set,但是调试显示v有一个对象类型,如何将对象分配到属性中?有什么想法吗?

  • 我使用springcloud config server在生产环境中按计划在运行时刷新我的应用程序属性。我的日程表每两周一次,没有任何问题。 我的应用程序在Kubernetes cloud上运行在多个吊舱上。吊舱随时可能崩溃或重新启动。当pod崩溃/重新启动时,它在应用程序启动时从配置服务器和存储库中获取最新的属性文件,而不是等待下一个计划的刷新周期。 任何解决以上问题的建议将不胜感激。

  • 问题内容: 有人可以给我展示一种代码有效的方法,以 根据从超链接发送给它的参数在spring mvc中更改对象属性吗? 我正在修改spring petclinic示例应用程序,以便“所有者” 详细信息页面可以显示特定 “所有者”拥有的每种“宠物”的单独列表。当前,“宠物”列表是每个“所有者”的属性, 可以在jstl中作为owner.pets访问。我想要的是让我的 jstl代码能够从jstl调用ow

  • 问题内容: 因此,我在回答这个问题的同时一直在使用Python,但发现这是无效的: 由于 。但是,对于从对象继承的任何类,它都是有效的: 打印将按预期显示“ hello”。为什么会这样呢?在Python语言规范中,有哪些规定不能将属性分配给香草对象? 问题答案: 为了支持任意属性分配,对象需要一个:与对象关联的字典,可以在其中存储任意属性。否则,就无处放置新属性。 的实例object并没有随身携带

  • 问题内容: 我遇到的烧瓶SQLAlchemy的一个问题,我可以设置对象的属性 place_collections ,但是当我想设置为对象属性 的地方 ,发生了错误: 如何设置联接搜索对象的属性,有人可以帮助我吗? 它们都是 “ flask_sqlalchemy.BaseQuery” 类。 模型 问题答案: 将返回您的对象集合。这类似于普通的香草SQLAlchemy。 但是,从SQLAlchemy