【发布时间】:2011-07-29 17:51:51
【问题描述】:
我不是在问这是否可以:
Object.prototype.method = function(){};
几乎每个人都认为这是邪恶,因为它搞砸了for(var i in obj)。
真正的问题
忽略
- 浏览器无能(不支持
Object.defineProperty的浏览器) - 财产冲突或覆盖的可能性
假设您有一些难以置信有用的方法,这是否被认为是错误的/不道德的?
Object.defineProperty(Object.prototype, 'methodOnSteriods',{
value: function(){ /* Makes breakfast, solves world peace, takes out trash */ },
writable: true,
configurable: true,
enumerable: false
});
如果您认为上述内容不道德,那么他们为什么会首先实施该功能?
【问题讨论】:
-
这个 defineProperty 设置是沿着原型链传播还是只适用于实际的 Object.prototype 对象?换句话说,如果你碰巧设置了 somevar = {mthodOnSteroids:'mistakeVal'},你是否会丢失 somevar 的定义设置,如 'enumerable: false'?
-
@XHR 是的,你确实失去了你的方法。例如
var cards = {forEach:'son'}; cards.forEach(function(){});//world exploids是的,你确实松了enumerable:false例如:for(var i in cards)console.log(i);输出'forEach'