JavaScript继承-组合继承

//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()方法也都能正确的识别基于组合继承创建的对象。

猜你喜欢

转载自www.cnblogs.com/gehaoyu/p/11804695.html