IE中的for...in... Bug

IE中如果一个对象中包含以下特殊的属性

var protoprops = [
 'toString',
 'valueOf', 
 'constructor',
 'hasOwnProperty', 
 'isPrototypeOf', 
 'propertyIsEnumerabel',
 'toLocaleString'
  ];

那么这些属性在for…in…中不会被枚举

   for( var p in {string: null}) {
        alert(1);
   }

以上代码在六年前的IE大部分版本中是不会弹出 1 的

为了更好的兼容

  var extend = (function (){
      var p,
      for(  p in { toString: null} ) {

            return  function (o)                   {
           var   i,source;
         for(i = 0; i < arguments.length; i++) {

               source = arguments[i];

            for( var prop in arguments[i]) {

                   o[prop] = source[prop];

                                           }
                                               }
                  return o;
                                                   }
                                     }              
        var protoprops = [
              'toString',
              'valueOf', 
              'constructor',
              'hasOwnProperty', 
              'isPrototypeOf', 
              'propertyIsEnumerabel',
              'toLocaleString'
                         ]; 
      return  function (o) {
      var j, source,, prop, i;
      for( j = 0 ; j < arguments.length; j++) {
            source = arguments[i];
            for( prop in source)  o[prop] = source[prop];
            for( i = 0; i < props.length; i++){
                if(souce.hasOwnProperty(props[i]))

                  {  prop = props[i];
                   o[prop] = source[prop]  
                  }      
            }       
            return o;       
        }

                           })()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值