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

2020-01-01  本文已影响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)父类私有的变为子类私有的,但是父类公有的子类继承不了;
*/
上一篇下一篇

猜你喜欢

热点阅读