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


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

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

     2、jq中也提供了extend()方法。

    用法是$.extend(第一个参数是要添加方法的函数,可以使空函数,{这个里面添加要扩展的方法用  键值对形式});

    例子:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
        </body>
    </html>
    <script src="js/jquery-3.0.0.js"></script>
    <script>
        function setjs(){};
        $.extend(setjs,{
            adad:function(a,b){
                return a+b;
            }
        });
        var r=setjs.adad(1,2);
        console.log(r);
    //    构造函数时
        $.extend(setjs.prototype,{
            adad:function(a,b){
                return a+b;
            }
        });
        var sets=new setjs();
        var r=sets.adad(1,2);
        console.log(r);
    </script>
  • 相关阅读:
    【cocos2d-js官方文档】二、资源管理器Assets Manager
    【cocos2d-js官方文档】七、CCFileUtils
    【cocos2d-js官方文档】九、cc.loader
    【cocos2d-js官方文档】十二、对象缓冲池
    【cocos2d-js官方文档】十二、对象缓冲池
    【cocos2d-js官方文档】二十一、v3相对于v2版本的api变动
    【cocos2d-js教程】cocos2d-js 遮挡层(禁止触摸事件传递层)
    cocos2d-js中怎么删除一个精灵
    MS Chart 折线图——去除时间中的时、分、秒,按天统计【转】
    MS Chart 条状图【转】
  • 原文地址:https://www.cnblogs.com/gaidalou/p/5963022.html
Copyright © 2020-2023  润新知