Null's Blog

Javascript中的继承-组合继承

Javascript中的继承-原型链javascript中的继承-借用构造函数均有各自的有点与缺点,而“组合继承”则将两者结合起来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function SuperType(name){
this.name=name;
this.friends=["gay1","gay2"];
}
SuperType.prototype.sayName=function(){
alert(this.name);
};
function SubType(name,age){
SuperType.call(this,name);
this.age=age;
}
SubType.prototype=new SuperType();
SubType.prototype.constructor=SubType;
SubType.prototype.sayAge=function(){
alert(this.age);
};
var instance1=new SubType("nUll",25);
var instance2=new SubType("mywei",25);
instance1.friends.push("gay3");
alert(instance1.friends); //gay1,gay2,gay3
instance1.sayName(); //nUll
instance1.sayAge(); //25
alert(instance2.friends); //gay1,gay2
instance2.sayName(); //mywei
instance2.sayAge(); //25
alert(instance1 instanceof SuperType); //true
alert(SuperType.prototype.isPrototypeOf(instance1)); //true

虽然组合继承确实能达到一定作用,但真的要让一个弱类型语言具有OOP的思想,本来就是期望过高的。组合继承在日常使用中不代表就一定比Javascript中的继承-原型链javascript中的继承-借用构造函数高端,我反而认为,在理解的情况下,合理利用javascript的特性,会更重要,毕竟javascript比c#更灵活。