该原型扩展破坏了$.each 方法,因为该方法使用length 属性(在jQuery 1.4.2 中)检测数组和对象之间:
// core.js Line 533
each: function( object, callback, args ) {
var name, i = 0,
length = object.length, // <--- your function from Object.prototype
isObj = length === undefined || jQuery.isFunction(object);
//...
如您所见,isObj 变量只有在不包含 length 属性(或属性值为 undefined)时才为真。
如果isObj 为假,jQuery 将尝试使用普通的for 循环进行迭代:
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
然后,appendTo 方法是使用$.each 创建的,所以没有定义:
//...
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
},
//...
我将始终建议不要扩展 Object.prototype,当您扩展此原型时,所有对象都会收到这些附加属性。
这尤其成问题,因为当您迭代对象的属性时
这些新属性出现,导致各种意外行为。