美文网首页
十三(8)、面向对象之call继承 ------ 2020-01

十三(8)、面向对象之call继承 ------ 2020-01

作者: 自己写了自己看 | 来源:发表于2020-01-01 17:03 被阅读0次

    1、还是上个例子:

    function A (x) {
        this.x = x;
    }
    A.prototype.getX = function () {
        console.log(this.x);
    }
    
    function B (y) {
        this.y = y;
    }
    B.prototype.getY = function () {
        console.log(this.y);
    }
    let b1 = new B(100);
    b1.y;
    b1.getY();
    b1.getX(); // Uncaught TypeError: b1.getX is not a function
    

    2、实现call继承:

    function A (x) {
        this.x = x;
    }
    A.prototype.getX = function () {
        console.log(this.x);
    }
    
    function B (y) {
        A.call(this, 200); // b1.x = 200;
        this.y = y;
    }
    B.prototype.getY = function () {
        console.log(this.y);
    }
    let b1 = new B(100); 
    console.log(b1.y); // 100
    console.log(b1.x); // 200
    b1.getY(); // 100
    b1.getX(); // Uncaught TypeError: b1.getX is not a function
    

    3、call继承的原理和特点:

    /**
    原理:在实例的父类中使用 call 执行想要继承的那个类,并且把继承的那个类的this指向改为当前实例;
    
    特点:
    (1)只能继承父类私有的属性和方法,不能继承原型上共有的属性和方法
    (因为只是把要继承的这个类当做普通函数执行,和其原型上的属性和方法没有关系);
    (2)父类私有的变为子类私有的,但是父类公有的子类继承不了;
    */
    

    相关文章

      网友评论

          本文标题:十三(8)、面向对象之call继承 ------ 2020-01

          本文链接:https://www.haomeiwen.com/subject/lqhgoctx.html