2013-10-23 15 views
0

我想扩展我的自定义构造函数的原型与$.extend。扩展器对象包含在IE(8?)中不可枚举的自定义toString方法。我没有发现jQuery是否内部修复了这个问题。jQuery.extend和越野车IE不可枚举道具

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

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

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

回答

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 
    } 
}();