首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

no-extend-native

在 JavaScript 中,您可以扩展任何对象,包括内置或“本机”对象。有时候人们会改变这些本地对象的行为,破坏代码中其他部分的假设。

例如,在这里我们覆盖了一个内建的方法,它会影响所有的对象,甚至是其他的内建对象。

代码语言:javascript
复制
// seems harmless
Object.prototype.extra = 55;

// loop through some userIds
var users = {
    "123": "Stan",
    "456": "David"
};

// not what you'd expect
for (var id in users) {
    console.log(id); // "123", "456", "extra"
}

避免这个问题的常见建议是将for循环内部包裹起来users.hasOwnProperty(id)。但是,如果此规则在您的代码库中严格执行,则无需采取这一步骤。

规则细节

不允许直接修改内建对象的原型。

此规则的错误代码示例:

代码语言:javascript
复制
/*eslint no-extend-native: "error"*/

Object.prototype.a = "a";
Object.defineProperty(Array.prototype, "times", { value: 999 });

选项

该规则接受一个exceptions选项,该选项可用于指定允许扩展名的内建列表。

异常

示例选项的正确代码示例{ "exceptions": ["Object"] }

代码语言:javascript
复制
/*eslint no-extend-native: ["error", { "exceptions": ["Object"] }]*/

Object.prototype.a = "a";

已知限制

此规则报告任何以下不太明显的方法来修改内置对象的原型:

代码语言:javascript
复制
var x = Object;
x.prototype.thing = a;

eval("Array.prototype.forEach = 'muhahaha'");

with(Array) {
    prototype.thing = 'thing';
};

window.Function.prototype.bind = 'tight';

何时不使用它

您可能希望在使用试图使用最新规范修补旧版 JavaScript 的 polyfills 时禁用此规则,例如那些可能Function.prototype.bindArray.prototype.forEach以未来友好方式进行修补的规则。

相关规则

  • no-global-assignVersion 此规则是在 ESLint 0.1.4.Resources 中引入的

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com