這是專業的Javascript設計模式的extend
定義,Apress出版,2008年,第44頁:爲什麼Javascript的擴展函數必須正確設置Object的原型構造函數?
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
對於線subClass.superclass = superClass.prototype;
,我想大概是同樣相同的,如果我們在做subClass.superclass = superClass
,因爲未來,無論如何,我們總是可以通過subClass.superclass.prototype
獲得原型。但我想爲什麼不指向構造函數,而是指向原型?但這是一個小問題。
更重要的問題是,爲什麼最後一行嘗試將對象的原型的構造函數設置回自己?我在Firefox和Chrome上嘗試過,他們總是這樣指出。
另外有點奇怪的是,爲什麼它使用if(superClass.prototype.constructor == Object.prototype.constructor)
?爲什麼不使用if (superClass === Object)
呢?
構造函數屬性是使instanceof工作的原因。這是一個很好的細節,實際上並不常見。 –
@MattGreer:錯了。 EcmaScript中'constructor'屬性沒有功能。 – Bergi