前言
继承,代码复用的一种模式。和其它高级程序语言相比,javascript有点点不一样,它是一门纯面向对象的语言,在JS中,没有类的概念,但也可以通过原型(prototype)来模拟对象的继承和多态。根据javascript对象的特点,JS中的继承又可以分类为引用对象继承和实例对象继承。
引用对象继承,子引用类型继承父引用类型,然后通过子引用类型生成的实例对象,具有父引用类型的特性。 而实例对象继承,继承得到的对象都具有父实例对象的所有属性和方法,其实就是指对象的复制和克隆。
- 默认继承模式
- 借用构造函数模式
- 借用构造函数和设置原型模式
- 共享原型模式
- 临时原型模式
- 借用构造函数+临时原型模式
实例对象继承也有以下几种实现模式:
- 临时-原型继承
- 借用和绑定实现继承(其实是复用)
引用对象继承-默认继承模式
默认继承模式很简单,如果要C继承P,实现代码:
function Parent(name) {
this.name = name || 'Adam';
}
Parent.prototype.say = function() {
return this.name;};
function Child(name) {
};
function inherit(C , P) {
C.prototype = new P();
}
var c = new C ('xiaoxin' );
alert(c.say()); // 'Adam'
模式特点:
- C不仅继承了P的所有属性,同时还继承了P的原型(P.prototype)的所有属性,但有时候,我们只想继承P的原型的属性;
- C的构造函数不能传递参数,也就是说无法通过给C构造方法传递参数,C将参数传递到P的构造方法(个人认为这个问题不大大,实现方式二 可以解决这个问题)。
引用对象继承-借用构造函数
借用构造函数模式,其实就是指采用Apply或Call来让子对象继承父对象的属性,具体看下面例子:
function Article(name) {
this.name = name;
this.tags =['js','css'];
}
var article = new Article('parent');
function BlogPost() {
}
BlogPost.prototype = article;