no-prototype-builtins
不允许直接使用 Object.prototypes 内建(no-prototype-builtins)
在 ECMAScript 5.1 中增加了Object.create
,它可以创建具有指定对象的对象[[Prototype]]
。Object.create(null)
是用于创建将用作 Map 的对象的常用模式。当假定对象将具有属性时,这可能导致错误Object.prototype
。此规则可防止Object.prototype
直接从对象调用方法。
规则细节
这个规则不允许直接在Object.prototype
对象实例上调用某些方法。
这个规则的错误
代码示例:
/*eslint no-prototype-builtins: "error"*/
var hasBarProperty = foo.hasOwnProperty("bar"
var isPrototypeOfBar = foo.isPrototypeOf(bar
var barIsEnumerable = foo.propertyIsEnumerable("bar"
这个规则的正确
代码示例:
/*eslint no-prototype-builtins: "error"*/
var hasBarProperty = Object.prototype.hasOwnProperty.call(foo, "bar"
var isPrototypeOfBar = Object.prototype.isPrototypeOf.call(foo, bar
var barIsEnumerable = {}.propertyIsEnumerable.call(foo, "bar"
何时不使用它
如果您永远不会使用阴影Object.prototype
方法或不从Object.prototype
继承的对象,则可能需要关闭此规则。
版本
这条规则是在 ESLint 2.11.0 中引入的。