jQuery是否保证与扩展Array或Object原型的兼容性?

js_*_*js_ 0 javascript arrays jquery prototype object

我想扩展Array和Object,如下面的代码:


$(window).load(function() {
    Array.prototype.x = 3
    Object.prototype.y = 4

    var a = [1, 2]
    for (var i in a) {
        alert(i + ': ' + a[i])
    }
})

/*
[result]
0: 1
1: 2
x: 3
y: 4
*/
Run Code Online (Sandbox Code Playgroud)

这个代码会不会给当前版本或未来版本的jQuery中的jQuery操作带来麻烦?

T.J*_*der 5

有了Array.prototype,我觉得你很安全.我不认为在任何地方都有明确的保证,但是jQuery已经在Prototype和MooTools的网站上共存多年,并且它们都扩展了Array.prototype.我认为jQuery团队不想破坏与这些库的兼容性.

但是:永远不要延长Object.prototype.这可能会破坏jQuery自己的代码,并且几乎肯定会破坏插件代码.大多数for..in循环假设{}没有可枚举的属性.如果添加Object.prototype,则表明该假设无效.(除非你使用新的ECMAScript5 defineProperty功能,让你使属性不可枚举,但它还没有被广泛支持.但是,为了好玩,你可以在这里试试.)