JavaScript继承
1、继承方式
a、原型链继承
b、借用构造函数继承
c、组合继承(原型+借用构造)
d、原型式继承
e、寄生式继承
f、寄生组合式继承
2、各种继承方式介绍
2.1、原型链继承
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.study = function(){ console.log('study finish!'); }; function Man (){ } Man.prototype = new Person();// *key point:原型链继承 var xiaoming = new Man(); xiaoming.study();
*key point:把父类的实例赋给子类的原型。只能继承方法。
2.2、借用构造函数继承
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.study = function(){ console.log('study finish!'); }; function Man (name,age) { Person.apply(this,arguments);// *key point:借用构造函数继承 } var xiaoming = new Man('xiaoming','20'); xiaoming.study();
*key point:在子类的构造函数里利用apply去调用父类的构造函数,从而达到继承父类属性的效果。每个实例都有一份自己的资源,但是这种方法只能继承父类的实例属性,不能继承父类的方法。
2.3、组合继承(原型+借用构造)
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.study = function(){ console.log('study finish!'); }; function Man (name,age) { Person.apply(this,arguments);// *key point1:借用构造函数继承 } Man.prototype = new Person();// *key point2:原型链继承 var xiaoming = new Man('xiaoming','20'); xiaoming.study();
*key point1 + *key point2 :组合式继承。组合原型链继承加借用构造函数继承。
会对父类的部分属性进行覆盖。未被覆盖的属性,所以实例共享。
2.4、原型式继承
2.5、寄生式继承
2.6、寄生组合式继承