📜  不要从目标对象 no-prototype-builtins 解决方案访问 object.prototype 方法 'hasownproperty' (1)

📅  最后修改于: 2023-12-03 14:48:51.476000             🧑  作者: Mango

不要从目标对象 no-prototype-builtins 解决方案访问 object.prototype 方法 hasOwnProperty

当我们需要检查一个对象是否拥有某个属性时,通常会使用 hasOwnProperty 方法。然而,遇到这个错误提示时:

不要从目标对象 no-prototype-builtins 解决方案访问 object.prototype 方法 hasOwnProperty

该如何操作呢?

问题解析

首先,我们需要了解 no-prototype-builtins 这个 ESLint 配置项。它主要是为了防止出现一些潜在的危险,比如通过原型链访问对象属性或方法。

而当我们尝试直接在对象上调用 hasOwnProperty 方法时,就会触发这个警告。原因很简单,因为这个方法实际上来自于 Object.prototype 对象,而这个对象的原型链上有一些潜在的风险。因此,ESLint 建议我们使用更加安全的方式来检查属性。

解决方案

为了解决这个问题,我们可以使用更加安全的方式来检查属性,比如 Object.prototype.hasOwnProperty.call(obj, propName)。具体来说,这个方法的实现方式是通过 Function.prototype.call 来在对象上调用 hasOwnProperty 方法,这样就能够避免直接在对象上访问这个方法导致的潜在风险了。

const obj = { name: 'John' }

// bad way
if (obj.hasOwnProperty('name')) {
  console.log('The object has a name property.')
}

// good way
if (Object.prototype.hasOwnProperty.call(obj, 'name')) {
  console.log('The object has a name property.')
}
总结

当我们遇到 no-prototype-builtins 提示时,不要慌张。为了避免潜在的风险,我们可以使用 Object.prototype.hasOwnProperty.call(obj, propName) 这个更加安全的方式来检查属性。这样,我们就能够避免一些潜在的危险,同时也能够提高代码的可读性和可维护性。