原型链继承
实现方式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15function superType(){
this.colors=["red","black","white"];
}
function subType(){
}
/*
inherit
*/
subType.prototype=new superType();
var a=new subType();
a.colors.push("green");
alert(a.colors);
var b=new subType();
alert(b.colors);
对于缺点一中所有实例共用属性的说法甚是疑惑,看这里:原型模式创建对象,即和创建对象的方法有关系
缺点1:原型最大的问题就是共享的本性!引用类型传值问题,结果导致所有子实例共用一个属性
缺点2:无法传参
借用构造函数实现继承
实现方式
使用call/apply()在新建对象上执行构造函数,从而继承了构造函数
不会在子实例中共用属性1
2
3
4
5
6
7
8
9
10
11
12
13function superType(){
this.colors=["red","black","white"];
}
function subType(){
/*inherit*/
superType.call(this);
}
var a=new subType();
a.colors.push("green");
alert(a.colors);
var b=new subType();
alert(b.colors);
**