Do not access Object.prototype method 'hasOwnProperty' from target object
编写代码的时候,使用了eslint:
let obj = {};
obj.hasOwnProperty('xxx');
此时会显示标题错误。
大概的意思的:不要使用对象原型上的方法。因为原型的方法可能会重写。
解决方法
object.property.hasOwnProperty.call(obj,'属性')
ECMAScript 5.1中,新增了 Object.create,它支持使用指定的 [[Prototype]] 创建对象。
Object.create(null) 是一种常见的模式,用于创建将用作映射的对象。
Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法
当假定对象将包含来自Object.prototype 的属性时,这可能会导致错误。该规则防止直接从一个对象调用某些 Object.prototype 的方法。
对象可以具有属性,这些属性可以将 Object.prototype 的内建函数隐藏,可能导致意外行为或拒绝服务安全漏洞。例如,web 服务器解析来自客户机的 JSON 输入并直接在结果对象上调用 hasOwnProperty 是不安全的,因为恶意客户机可能发送一个JSON值,如 {“hasOwnProperty”: 1},并导致服务器崩溃.
为了避免这种细微的 bug,最好总是从 Object.prototype 调用这些方法。例如,foo.hasOwnProperty(“bar”) 应该替换为 Object.prototype.hasOwnProperty.call(foo, “bar”)。