JavaScript继承-组合继承

天大地大妈咪最大 提交于 2019-12-03 17:26:05
//js中最常用的继承方式--组合继承
    function Super(name){
        this.name = name;
        this.colors = ["red","blue","green"];
    }
    Super.prototype.sayName = function(){
        console.log(this.name);
    }
    function Sub(name){
        //继承了属性
        Super.call(this,name);
    }
    //继承了方法
    Sub.prototype = new Super();
    var sub1 = new Sub("Nick");
    sub1.colors.push("black");
    console.log(sub1.colors);    //(4) ["red", "blue", "green", "black"]
    sub1.sayName();        //Nick

    var sub2 = new Sub("Lucy");
    console.log(sub2.colors);    //(3) ["red", "blue", "green"]
    sub2.sayName();        //Lucy

组合继承避免了原型链和借用构造函数的缺陷,融合了它们的优点,成为js中最常用的继承模式。

    //返回的都是true
    console.log(sub1 instanceof Object);
    console.log(sub1 instanceof Super);
    console.log(sub1 instanceof Sub);

    console.log(Object.prototype.isPrototypeOf(sub2));
    console.log(Super.prototype.isPrototypeOf(sub2));
    console.log(Sub.prototype.isPrototypeOf(sub2));

并且instanceof和isPrototypeOf()方法也都能正确的识别基于组合继承创建的对象。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!