Lim*_*ime 34 javascript ecmascript-5
我不是在问这是否合适:
Object.prototype.method = function(){};
Run Code Online (Sandbox Code Playgroud)
几乎每个人都认为这是邪恶的,因为它会混乱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
});
Run Code Online (Sandbox Code Playgroud)
如果你认为上述内容是不道德的,为什么他们甚至会首先实现这个功能呢?
Ale*_*yne 23
如果它适用于您的目标环境,我认为它很好.
此外,我认为原型扩展偏执狂被夸大了.只要你hasOwnProperty()
像一个好的开发者一样使用它就可以了.最糟糕的情况是,您在其他地方重载该属性并丢失该方法.但如果你这样做,这是你自己的错.
hug*_*omg 11
我会说这几乎和以前一样邪恶.最大的问题,仍然和以前一样,是Object.prototype是全局的.虽然你的方法目前可能正在解决世界和平问题,但它可能会覆盖其他人的方法(这可以保证银河的和平),或者将来可能会被一些你无法控制的图书馆覆盖(因此再次让世界陷入混乱)
新版本的Javascript具有许多与属性相关的功能,例如将属性定义为可枚举/不可枚举,具有getter和setter ... Object.defineProperty存在是为了控制它.
来自Mozilla Docs:
该方法允许精确地添加或修改对象上的属性.通过赋值添加的正常属性会创建在属性枚举期间显示的属性(对于... in循环),其值可能会更改,并且可能会被删除.此方法允许从默认值更改这些额外的详细信息.
这个新功能基本上是支持新功能所必需的,你应该在你自己的东西上使用它.能够修改Object.prototype只是它的一个副作用,它也是一个"正常"的对象,就像以前一样邪恶.
归档时间: |
|
查看次数: |
18254 次 |
最近记录: |