js中的继承

http://www.cnblogs.com/ayqy/p/4471638.html

原型链继承

子类原型对象指向父类实例

1
Child.prototype = new Parent(); // 核心
  • 优点:简单
  • 缺点:
    1. 从原型对象继承来的引用属性是所有实例共享的。
    2. 创建子类实例时,无法向父类构造函数传参

构造函数

子类中调用了父类的构造方法,没有用到原型

1
2
3
function Child(name){
Parent.call(this, name); // 核心
}
  • 优点:
    1. 解决了子类实例共享父类引用属性的问题
    2. 创建子类实例时,可以向父类构造函数传参
  • 缺点:
    1. 无法实现函数复用,每个子类实例都持有一个函数,太多了会影响性能,内存爆炸。。

组合继承

针对函数复用问题,构造函数+原型继承

1
2
3
4
5
6
7
8
function Parent(name){
this.name = name;
}
Parent.prototype.fun = function(){};
function Child(){
Parent.call(this); // 核心
// ...
}

func.call(this) ,

func中的this指向了第一个参数!