zoukankan      html  css  js  c++  java
  • js构造函数的完美继承(欢迎吐槽)

    function Animal(){                   //定义父类
        this.leibie="动物";
    }
    Animal.prototype.test1=[1,2];
    
    function Cat(name,color){            //定义子类
        Animal.call(this);               //继承父类的this变量属性
    //    Animal.apply(this,arguments);  //如果需要子类参数,也可用这条替代上条语句
        this.name=name;
        this.color=color;
    }
    
    function extend(Child,Parent){      //继承父类的prototype属性
        var c = Child.prototype;
        var p = Parent.prototype;
        for (var i in p){
            if(p.hasOwnProperty(i)){
                if(typeof p[i]==="object"){
                    c[i] = (p[i].constructor === Array)?[]:{};
                    deepCopy(c[i],p[i]);         //深拷贝,拷贝复合类型(Array,Object),而并不是简单的把俩个指针指向同一内存地址。 浅拷贝,拷贝基本类型。
                }
                else{
                    c[i] = p[i];
                }
            }
        }
    }
    
    function deepCopy(childObject,parentObject){
        for (var i in parentObject){
            if(parentObject.hasOwnProperty(i)){
                if(typeof parentObject[i]==="object"){
                    childObject[i] = (parentObject[i].constructor === Array)?[]:{};
                    deepCopy(childObject[i],parentObject[i]);
                }
                else{
                    childObject[i] = parentObject[i];
                }
            }
        }
    }
    
    extend(Cat,Animal);       //继承父类的prototype属性
    
    /*继承的时候可以看需求,如果只需继承prototype的属性,那么不需要Animal.call(this),如果只需要继承本地属性,那么不需要extend,来提高效率。如果都要,则都加上。*/
    
    var cat1 = new Cat("Linda","pink");
    var animal1 = new Animal();
    
    cc.log(cat1.test1[0]);     //1
    cc.log(animal1.test1[0]);  //1
    cat1.test1[0]=2;
    cc.log(cat1.test1[0]);     //2
    cc.log(animal1.test1[0]);  //1
    animal1.test1[0]=3;
    cc.log(cat1.test1[0]);     //2
    cc.log(animal1.test1[0]);  //3
  • 相关阅读:
    Java实现蓝桥杯 算法训练 Professor Monotonic's Network
    Java实现 蓝桥杯 算法训练 数字游戏
    Java实现 蓝桥杯 算法训练 数字游戏
    Java实现 蓝桥杯 算法训练 数字游戏
    Java实现 LeetCode 264 丑数 II(二)
    Java实现 LeetCode 264 丑数 II(二)
    linux下c/c++方式访问curl的帮助手册
    boost 1.56.0 编译及使用
    使用Boost.Asio编写通信程序
    webrtc教程
  • 原文地址:https://www.cnblogs.com/rhythm2014/p/3830938.html
Copyright © 2011-2022 走看看