首页 > 代码库 > 对象继承其他对象的方法和属性

对象继承其他对象的方法和属性

顶一个扩展函数,用来将第二个参数及以后的属性、方法拷贝给第一个函数;

<script>//    var extend=(function(){}());  这是格式    var extend=(function(){        var p;        var result=p in {toString:null};        if(result){ //检测p是否存在toString属性,这是一个检测  看是否可以可枚举 所以用toString这个为代表            return function extend(o){                for(var i=1;i<arguments.length;i++){ //这里采用i=1 开始 是因为第一位0 是o;后面的所有存在的函数都是为o提供方法和属性的,给o扩展;                    var source=arguments[i];                    for(var prop in source){                        o[prop]=source[prop]; //这里才是复制属性方法给o;                    }                }                return o;            };        }        //如果p不存在 可以枚举到toString        else{            return function pathed_extend(o){                for(var i=1;i<arguments.length;i++){                    var source=arguments[i];                    for(var prop in source){                        o[prop]=source[prop];                    };                };//                这里定义要检查的特殊属性 之前没法自动枚举到                 var protoprops=[‘toString‘,‘valueOf‘,‘constructor‘,‘hasOwnproperty‘,‘isPrototypeOf‘,‘propertyIsEnmerable‘,‘toLocalString‘];                for(var j=0;j<protoprops.length;j++){                    prop=protoprops[j];                    if(source.hasOwnProperty(prop)){                        o[prop]=source[prop];                    }                }                return o;            }        }    }());    //测试 定义一个空对象    var arr={};    var b={        speak:‘1‘,        name:‘b‘,        run:function(){            var that=this;            alert(this.name+‘正在run‘);        }    };    var c={        sleep:function(){            alert(‘睡觉‘);        }    }    //arr.run(); //未拷贝之前 报错    extend(arr,b); //拷贝b的方法和属性    arr.name="arr"; //自定义新的属性    arr.run(); //测试拷贝的方法        extend(arr,b,c); //测试多个参数 能不能继承到C的方法    arr.sleep(); //可以    </script>

 

对象继承其他对象的方法和属性