jQuery.extend和buggy IE非枚举道具

时间:2013-10-23 10:10:15

标签: jquery for-loop each extend enumerable

我想用$.extend扩展我的自定义构造函数的原型。扩展程序对象包含一个自定义toString方法,该方法在IE中不可枚举(8?)。我没有发现jQuery是否在内部修复了这个问题。

var myConstructor = function() { /* ... */ };

$.extend(myConstructor.prototype, {
    toString: function() { return "foo"; }
});

这会有用吗?如果没有:是否有快速修复或我是否需要使用自己的for-in循环?

1 个答案:

答案 0 :(得分:0)

我有机会亲自测试它,而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
    }
}();