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

时间:2011-04-26 06:21:40

标签: javascript jquery arrays object prototype

我想扩展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
*/

此代码是否会对当前版本或未来版本的jQuery中的jQuery操作造成任何麻烦?

3 个答案:

答案 0 :(得分:5)

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

但是:永远不要延长Object.prototype 。这可能会破坏jQuery自己的代码,并且几乎肯定会破坏插件代码。大多数for..in循环假定{}没有可枚举的属性。如果您添加到Object.prototype,则表明该假设无效。 (除非您使用新的ECMAScript5 defineProperty功能,该功能允许您使属性不可枚举,但它尚未得到广泛支持。但是,有趣的是,you can try it out here。)

答案 1 :(得分:0)

不,我所知道的jQuery没有这样的保证。

jQuery本身并不扩展任何原生原型,因此除了对DOM节点进行有限的篡改之外,它几乎是自包含的。但是,当您像这样扩展ArrayObject时,您不能依赖其他人编写的jQuery插件来表现得很好。许多其他库实际上扩展Array,但扩展Object会产生更严重的后果,因为它会影响每个对象。

它适用于所有未来版本的jQuery吗?猜猜:)

答案 2 :(得分:0)

John Resig(jQuery的创建者)曾写道,jQuery可以安全地反对扩展Array.prototype但不能100%安全地反对扩展Object.prototype(我不记得确切的地方,它可能是在宣布一个新的jQuery版)。没有正式的保证AFAIK,但是jQuery的目标是抵抗这些变化和问题扩展原型(例如thisthis)被处理为错误,尽管你可以看到例子,它可能需要一段时间来修复它们,所以即使通过扩展数组,你也会增加在某种程度上遇到错误的风险。