• 面向对象---继承


    继承是面向对象中一个比较核心的概念,其他正统面向对象语言都会用两种方式实现继承,一个是接口实现,一个是继承。而ECMAscript只支持继承,不支持接口实现,而实现继承的方式依靠原型链来完成。

     function Box(){ //被继承的函数叫超类型(父类,基类)    this.name="中国";

    };
    
    function Fun(){                               //继承的函数叫做子类型(子类,派生类)
        this.user=333;
    };
    //通过原型链继承,超类型实例化后的对象实例,赋值给子类型的原型属性。
    //new Box()会将Box构造里的信息和原型里的信息都交给fun
    //Fun的原型,得到的是Box的构造+原型里的信息
    Fun.prototype=new Box(); var fun=new Fun(); alert(fun.name); alert(fun.user); function Gou(){ this.uu=88; } Gou.prototype=new Fun(); var b=new Gou(); alert(b.name); //输出中国继承了Box也继承了Fun

    //对象冒充继承可以传参  但不能继承原型的属性
    function Box(age){
        this.user=age;
        this.family=['父亲','姐妹','弟弟'];
    };
    
    Box.prototype.name=33;
    
    function Fun(age){
        Box.call(this,age);                                //对象冒充给超类型传参
    };
    
    var b=new Fun(33);
    alert(b.user);
    alert(b.family);
    alert(b.name);                                    //此方式不能继承原型  输出undefinde
    //原型链+对象冒充的方法  实现既能继承属性也能继承原型   组合继承
    //
    //
    function Box(age){
        this.user=age;
        this.family=['父亲','姐妹','弟弟'];
    };
    
    Box.prototype.name='中国';
    
    Fun.prototype=new Box();            //原型链继承方式
    function Fun(age){
        Box.call(this,age);                                
    };
    
    var b=new Fun(33);
    alert(b.user);
    alert(b.family);
    alert(b.name);                                    

    还有一种继承模式叫做:原型式继承:这种继承借助原型并基于已有的对象创建新对象,同时还不比因此创建自定义类型。

    //原型式继承
    //临时中转函数
    function obj(o){                    //o表示将要传递进入一个对象        
        function F(){};                    //F构造是一个临时新建的对象,用来存储传递过来的对象
        F.prototype=o;                //将o对象实例赋值给F构造的与原型对象
        return new F();                //最后返回这个得到传递过来对象的对象实例
    }
    //其实就相当于 F.prototypre=o  等于box1.prototypr=new Box();
    
    //这是字面量的声明方式  相当于var box=new box();
    var box={
        name:"lee",
        age:100
    };
    //box1等于new F();
    var box1=obj(box);
    alert(box1.name);

     

  • 相关阅读:
    红黑树(二)之 C语言的实现
    红黑树(一)之 原理和算法详细介绍
    Design and Evaluation of an RDMA-aware Data Shuffling Operator for Parallel Database Systems
    RDMA Technology White Paper
    InfiniBand: An Introduction + Simple IB verbs program with RDMA Write
    crc32_offload_api_example
    Programming Examples Using IBV Verbs
    15. RDMA之RoCE & Soft-RoCE
    14. RDMA之Memory Window
    13. RDMA之用户态与内核态交互
  • 原文地址:https://www.cnblogs.com/xiaowie/p/10275729.html
Copyright © 2020-2023  润新知