Dan*_*ore 7 javascript prototype
我知道五年前这是一个有争议的问题,但我想知道今天的JavaScript是否有所改变.是否有任何现实世界的主要现代图书馆与扩展不兼容的例子Object.prototype?
我对假设"有人可能会for in在您想要使用的库中编写错误的迭代代码感兴趣,可能在将来,然后您可能会得到一个奇怪的错误"
CMS*_*CMS 12
是否存在与扩展Object.prototype不兼容的主要现代库的现实示例?
是的,我记得jQuery的问题 - 例如,它是一个较少侵入的库 - 例如:
我记得的另一个案例是有人向对象添加了一个load函数Object.prototype,它导致了$().load事件的问题:
// DON'T DO THIS ! :)
Object.prototype.load = function () {};
?$(window).load(function () {
alert('load event'); // never fired
});?
Run Code Online (Sandbox Code Playgroud)
这里的例子.
Object.prototype绝不建议以这种方式扩充对象,因为这些属性将由大量对象继承 - 即使是某些宿主对象 - 并且如您所知,主要关注的是它们将由for-in语句枚举.
在ECMAScript 5中,现在存在一种更安全的方式,因为我们现在可以声明不可枚举的属性,例如:
Object.defineProperty(Object.prototype, 'foo', { value: 'bar' });
Run Code Online (Sandbox Code Playgroud)
在属性描述符 - { value: 'bar' }- 我们可以指定属性属性,在Value Properties的情况下,如上例所示,我们可以指定writable属性和common configurable属性(确定是否可以重新配置属性 - 属性更改 - 或删除.
我们还有enumerable属性,它确定该for-in语句是否枚举该属性.
如果我们不指定属性,false默认情况下,描述符将如下所示:
{
value: 'bar',
writable: false,
configurable: false,
enumerable: false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |