工具库汇总

利用  defineProperty 与 getOwnPropertyDescriptor 完成对属性的深度复制

Object.defineProperty(Object.prototype,
    "extend",{
        writable:true,
        enumerable:false,
        configurable:true,
        value:function(o){
            //获取自有属性 和 可枚举属性
            var names = Object.getOwnPropertyNames(o),len;
            for(var i = 0;len = names.length,i<len;i++){
                //属性存在则跳过
                if(names[i] in  this) continue;
                //获取其属性对应的描述对象
                var oDesc = Object.getOwnPropertyDescriptor(o,names[i]);
                Object.defineProperty(this,names[i],oDesc);
            }
        }
    });

 

 实例:

var now = Object.defineProperties({},{
    "custom":{
        writable:false,
        configurable:false,  
        enumerable:true,
        value:"被修改了 这么神奇"
    },
    "custom2":{
       writable:false,
       configurable:false,  
       enumerable:true,
       value:"被修改了 这么神奇"
    }
});

console.log(now); //{ custom: '被修改了 这么神奇', custom2: '被修改了 这么神奇' }



// extend 继承

Object.defineProperty(Object.prototype,
    "extend",{
        writable:true,
        enumerable:false,
        configurable:true,
        value:function(o){
            //获取自有属性 和 可枚举属性
            var names = Object.getOwnPropertyNames(o),len;
            for(var i = 0;len = names.length,i<len;i++){
                //属性存在则跳过
                if(names[i] in  this) continue;
                //获取其属性对应的描述对象
                var oDesc = Object.getOwnPropertyDescriptor(o,names[i]);
                Object.defineProperty(this,names[i],oDesc);
            }
        }
    });


var a = {};
a.extend(now);
console.log(a);
// { custom: '被修改了 这么神奇', custom2: '被修改了 这么神奇' }

 

posted @ 2016-09-20 15:23  czhyuwj  阅读(164)  评论(0编辑  收藏  举报