十三(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)父类私有的变为子类私有的,但是父类公有的子类继承不了;
*/