建構子、原型實作繼承的缺陷
首先來分析建構子和原型鏈兩種實作繼承方式的缺陷:
建構函式(物件冒充)的主要問題是必須使用建構函式方式,且無法繼承透過原型定義的方法,這不是最好的選擇。不過如果使用原型鏈,就無法使用帶有參數的建構函數了。開發者如何選擇?答案很簡單,兩者都用。
建構子 原型混合方式
這種繼承方式使用建構函式定義類,並非使用任何原型。創建類別的最好方式是用建構函數定義屬性,用原型定義方法。這種方式同樣適用於繼承機制,用物件冒充繼承建構函式的屬性,用原型鏈繼承 prototype 物件的方法。用這兩種方式重寫前面的例子,程式碼如下:
ClassA.prototype.sayColor = function () {
alert(this.color);
};
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function () {
alert(this.name);
};