JavaScript继承-借用构造函数继承

借用构造函数继承是在子类型构造函数的内部调用父类型构造函数,通过使用apply()和call()方法

    function girlFriend(){
        this.girls = ['chen','wang','zhu'];
    }
    function Person(){
        girlFriend.call(this,20);
    }
    var wang = new Person();
    var zhu = new Person();
    wang.girls.push('zhang');
    console.log(wang.girls);    //(4) ["chen", "wang", "zhu", "zhang"]
    console.log(zhu.girls);        //(3) ["chen", "wang", "zhu"]

通过以上代码,我们可以发现,在原型链继承中出现的问题不再出现了,这个父类的引用值不会被子类所创建的实例共享了。

借用构造函数继承的优势是可以在子类型构造函数中向超类型构造函数传递参数,例如以下代码:

    function SuperType(name){
        this.name = name;
    }
    function SubType(){
        SuperType.call(this,"nick");
        this.age = 20;
    }
    var instance = new SubType();
    console.log(instance.name);        //nick
    console.log(instance.age);        //20

借用构造函数继承的问题:用构造函数继承并不能继承到父类型原型中定义的方法,例如以下代码,在girlFriends构造函数的原型中添加sayHello方法:

girlFriend.prototype.sayHello = function(){
        console.log('hello');
    }

继承它的子类构造函数所创建的实例并不能调用到这个sayHello方法,返回的值是undefined

posted @ 2019-11-06 12:07  好多坨屎  阅读(202)  评论(0)    收藏  举报