原型继承(JS中最常用的一种继承方式)
- 子类B想要继承父类A中所有的属性和方法(私有+公有),只需要B.prototype = new A();即可
- 原型继承的特点:它是把父类中私有的+公有的都继承了子类原型上(子类的公有的)
- 核心:原型继承并不是把父类中的属性和方法克隆一份一模一样的给B,而是让B和A之间增加了原型链的连接,以后B的实例想要A中的getX方法,需要一级级的向上查找来使用
function A() {
this.a = 'aaa';
this.b = function () {
console.log('bbb')
}
}
A.prototype.c = 'ccc';
A.prototype.d = function () {
console.log('ddd')
}
function B() { }
B.prototype = new A();
console.log(new B());
call继承
-
把父类私有的属性和方法,克隆一份一模一样的作为子类私有的属性
function A(){ this.a = 'aaa'; this.b = function(){ console.log('bbb'); } } A.prototype.c = 'ccc'; A.prototype.d = function(){ console.log('ddd'); } function B(){ A.call(this); } console.log(new B())
冒充对象继承
- 把父类私有的+公有的克隆一份一模一样的给子类私有的
function A(){
this.a = 'aaa';
this.b = function(){
console.log('bbb');
}
}
A.prototype.c = 'ccc';
A.prototype.d = function(){
console.log('ddd');
}
function B(){
let temp = new A();
for(let attr in temp){
this[attr] = temp[attr];
}
temp = null;
}
console.log(new B());
混合模式继承
- 原型继承+call继承
function A(){
this.a = 'aaa';
this.b = function(){
console.log('bbb');
}
}
A.prototype.c = 'ccc';
A.prototype.d = function(){
console.log('ddd');
}
function B(){
A.call(this);
}
B.prototype = new A();
B.prototype.constructor = B;
console.log(new B());
寄生组合式继承
function A(){
this.a = 'aaa';
this.b = function(){
console.log('bbb');
}
}
A.prototype.c = 'ccc';
A.prototype.d = function(){
console.log('ddd');
}
function B(){
A.call(this);
}
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
console.log(new B());
网友评论