zoukankan      html  css  js  c++  java
  • 对象继承其他对象的方法和属性

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

    <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>
  • 相关阅读:
    C语言printf语法
    Android动画
    【转】Android内存(内存溢出 内存不足 内存低 .)优化详解
    Android dialog在有的手机上宽度不能充满屏幕的问题
    ios单例模式(Singleton)
    给ImageButton设置按下的效果
    Dynamics CRM Entity Relationship Many to Many (N:N)
    Python实现Mysql数据库连接池
    python获取指定时间差的时间
    Visual studio debug—Process with an Id of 5616 is not running的解决方法
  • 原文地址:https://www.cnblogs.com/gaidalou/p/5963022.html
Copyright © 2011-2022 走看看