我想像下面的代码一样扩展数组和对象:
$(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
*/
这段代码会对当前版本或 future 版本的 jQuery 中的 jQuery 操作造成任何麻烦吗?
最佳答案
使用Array.prototype
,我认为你非常安全。我不认为任何地方都有明确的保证,但 jQuery 多年来一直与 Prototype 和 MooTools 共存于网站上,并且它们都扩展了 Array.prototype。我认为 jQuery 团队不想破坏与这些库的兼容性。
但是:永远不要扩展Object.prototype
。这很可能会破坏 jQuery 自己的代码,并且几乎肯定也会破坏插件代码。大多数 for..in
循环假定 {}
没有可枚举属性。如果您添加到 Object.prototype
,您就会使该假设无效。 (除非您使用新的 ECMAScript5 defineProperty
功能,该功能可让您将属性设置为不可枚举,但尚未得到广泛支持。不过,为了好玩,you can try it out here 。)
关于javascript - jQuery 是否保证与数组或对象的扩展原型(prototype)兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5786730/