沒有多重繼承

沒有多重繼承

部分物件導向語言允許多重繼承。也就是說,物件可以從互不相關的親物件繼承屬性和值。不過 JavaScript 並不支援多重繼承。

屬性值的繼承發生在執行時期,由 JavaScript 搜尋物件的原型鏈以找出繼承值。由於物件只有單一的已連結原型,因此 JavaScript 並不能從多於一個以上的原型鏈中動態的繼承。

在 JavaScript 中,建構子函數的內部可以有很多個其他的建構子函數的呼叫。如此可提供多重繼承的假象。例如,思考下面的語句︰

function Hobbyist (hobby) {
   this.hobby = hobby || "scuba";
}

function Engineer (name, projs, mach, hobby) {
   this.base1 = WorkerBee;
   this.base1(name, "engineering", projs);
   this.base2 = Hobbyist;
   this.base2(hobby);
   this.machine = mach || "";
}
Engineer.prototype = new WorkerBee;

dennis = new Engineer("Doe, Dennis", ["collabra"], "hugo")

接著假定 WorkerBee 的定義使用的是本章先前的內容。在這個情況下,dennis 物件就有了這些屬性︰

dennis.name == "Doe, Dennis"
dennis.dept == "engineering"
dennis.projects == ["collabra"]
dennis.machine == "hugo"
dennis.hobby == "scuba"

所以 dennisHobbyist 建構子中得到了 hobby 的屬性。然而,假定你稍後把新的屬性加入到 Hobbyist 建構子的原型︰

Hobbyist.prototype.equipment = ["mask", "fins", "regulator", "bcd"]

dennis 物件並未繼承到這個新的屬性。

文件標籤與貢獻者

 此頁面的貢獻者: teoli, happysadman
 最近更新: teoli,