Это расширение прототипа нарушает метод $.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
будет иметь значение true, только если она не содержит свойства length
(или значение свойства undefined
).
Если isObj
равно false, 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
, когда вы расширяете этот прототип ALL объекты получают эти дополнительные свойства.
Это особенно проблематично, поскольку при переборе свойств объекта
эти новые свойства появляются, вызывая все виды неожиданного поведения.