我想扩展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操作造成任何麻烦?
答案 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节点进行有限的篡改之外,它几乎是自包含的。但是,当您像这样扩展Array
和Object
时,您不能依赖其他人编写的jQuery插件来表现得很好。许多其他库实际上扩展Array
,但扩展Object
会产生更严重的后果,因为它会影响每个对象。
它适用于所有未来版本的jQuery吗?猜猜:)
答案 2 :(得分:0)