码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-10-15 13:46:46      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

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

<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>

 

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

标签:

原文地址:http://www.cnblogs.com/gaidalou/p/5963022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!