Js面向物件程式設計——繼承(組合繼承)
阿新 • • 發佈:2019-01-10
繼承(組合繼承)
Js面向物件程式設計——繼承(組合繼承)
- 示例:
function SuperType(name){ this.name=name; this.colors=["red","blue","green"]; } SuperType.prototype.sayName=function(){ alert(this.name); }; function SubType(name,age){ //繼承屬性 SuperType.call(this,name); this.age=age; } //繼承方法 SubType.prototype=new SuperType(); SubType.prototype.sayAge=function(){ alert(this.age); }; var instance1=new SubType("Nicholas",29); instance1.colors.push("black"); alert(instance1.colors); //"red,blue,green,black" instance1.sayName(); //"Nicholas"; instance1.sayAge(); //29 var instance2=new SubType("Greg",27); alert(instance2.colors); // "red,blue,green" instance2.sayName(); //Greg instance2.sayAge(); //27
- 在這個例子中,superType建構函式定義了倆個屬性:name和colors.SuperType的原型定義了一個方法sayName()。SubType建構函式在呼叫superType建構函式時傳入了name引數,緊接著又定義了它自己的屬性age。然後,將SuperType的例項賦值給SubType的原型,然後又在該新原型上定義了方法sayAge()。這樣一來,就可以讓倆個不同的SubType例項既分別擁有自己屬性——包括colors屬性,又可以使用相同的方法了。
- 組合繼承避免了原型鏈和借用建構函式的缺陷,融合了它們的優點,成為JavaScript中最常用的繼承模式。而且,instanceof和isPrototypeOf()也能夠用於識別基於組合繼承建立的物件。
參考了Javascript高階程式設計