jQuery.extend и глючный IE не перечислимые реквизиты
Я хотел бы расширить прототип моей пользовательской функции конструктора с помощью $.extend
, Объект-расширитель содержит пользовательский toString
метод, который не будет перечисляем в IE (8?). Я не выяснил, решает ли jQuery эту проблему внутренне или нет.
var myConstructor = function() { /* ... */ };
$.extend(myConstructor.prototype, {
toString: function() { return "foo"; }
});
Будет ли это работать? И если нет: есть ли быстрое решение или мне нужно использовать мой собственный цикл for-in?
1 ответ
Решение
У меня был шанс проверить это сам, а jQuery нет. Вот решение, которое я нашел:
var extendPrototype = function() {
var objectPrototype = Object.prototype,
hasOwnProperty = objectPrototype.hasOwnProperty,
isBuggy = !{valueOf: 0}.propertyIsEnumerable("valueOf"),
keys;
if(isBuggy)
keys = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
return function(prototype, object) {
var i,
key;
for(key in object)
if(hasOwnProperty.call(object, key))
prototype[key] = object[key];
if(isBuggy) {
i = 0;
for(i; key = keys[i]; i ++)
if(object[key] !== objectPrototype[key] || hasOwnProperty.call(object, key))
prototype[key] = object[key]
}
return prototype
}
}();