• 面向对象---继承


    继承是面向对象中一个比较核心的概念,其他正统面向对象语言都会用两种方式实现继承,一个是接口实现,一个是继承。而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);

     

  • 相关阅读:
    uvm_cookbook--sequences--wait for a signal
    Makefile目标文件搜索(VPATH和vpath
    git stash
    vuex-persist,解决vuex中的数据刷新页面之后丢失的问题
    element表格中的输入框有时会存在输入不上的情况
    简单 Linux 文件系统?
    Shell 脚本是什么?
    什么是BASH?
    如何规划一台 Linux 主机,步骤是怎样?
    什么是GUI?
  • 原文地址:https://www.cnblogs.com/xiaowie/p/10275729.html
Copyright © 2020-2023  润新知