沒有多重繼承
部分物件導向語言允許多重繼承。也就是說,物件可以從互不相關的親物件繼承屬性和值。不過 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"
所以 dennis
從 Hobbyist
建構子中得到了 hobby
的屬性。然而,假定你稍後把新的屬性加入到 Hobbyist
建構子的原型︰
Hobbyist.prototype.equipment = ["mask", "fins", "regulator", "bcd"]
dennis
物件並未繼承到這個新的屬性。