js继承两种比较推荐的实现

js继承的实现方法比较多,写两种比较推荐的

js是通过原型的方式实现继承的,比较推荐的方式是“组合继承”和“寄生组合继承”

1.组合继承:
通过对象冒充,实现属性继承(apply/call方法)
通过原型指向父级的实例
如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Animal(name) {
this.name = name;
}
Animal.prototype.getName = function () {
return this.name;
}
//继承Animal:
function Cat(name, age) {
Animal.call(this, name); //调用父级的构造函数,实现属性继承
this.age = age; //添加自己的属性
}
//自己的原型,指向父级的实例,实现方法继承
Cat.prototype = new Animal ();

2.寄生组合继承:
通过对象冒充,实现属性继承(apply/call方法)
通过一个空函数砍掉父类的实例属性,原型继承的时候不会再实例化一次属性了。
如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function Animal(name) {
this.name = name;
}
Animal.prototype.getName = function () {
return this.name;
}
//继承Animal:
function Cat(name, age) {
Animal.call(this, name); //调用父级的构造函数,实现属性继承
this.age = age; //添加自己的属性
}
(function(){
// 创建一个没有实例方法的函数(类)
var Super = function(){};
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();
})();

作者 [@sha Qihe]

2016 年 4月 10日