你好我最近偶然发现了这种情况下,我不知道怎么回事:
内部自调用匿名函数我已经扩展了对象原型为:
(function () {
Object.defineProperty(Object.prototype, "values", {
configurable: false,
enumerable: false,
writable: false,
value: function () {
var values = [];
for (var k in this){
values.push(this[k]);
}
return values;
}
});
})();
console.log(window.values);
问题是,在“值”功能就会自动升为的Firefox全球不管是什么。
任何人都可以解释,为什么?如果有可能,而不使用在全球范围内扩展对象原型?
谢谢!
任何人都可以解释,为什么?
因为Object.prototype
是window
的原型链。
console.log(window instanceof Object);
因此,对Object.prototype
每个属性是可作为“全局变量”,如
console.log(window.toString === Object.prototype.toString);
这不是针对Firefox的BTW。
如果有可能,而不使用在全球范围内扩展对象原型?
号那怎么window
和原型链工程的副作用。
由于Object.prototype
几乎是每个原型链的一部分,你应尽量避免使用非标准的方法扩展它。
特别是关于values
:有Object.values
,其工作方式类似于和是一个标准的方法。喜欢使用/填充工具这一块,而不是添加的东西Object.prototype
的。