這很複雜,但我已經有好幾天了。我將一個Javascript「類」「擴展」到另一個,但是從子類方法調用基類方法無法正常工作。看起來好像基類方法「作用」爲靜態方法:在從子類方法調用基類方法時,在類中定義的屬性在某種程度上具有它們的默認值。Javascript類擴展:從子級函數調用基類函數:似乎是調用靜態方法
爲了讓事情簡單我不包括我的精心製作的代碼,但創造的我在做什麼一個簡單的例子:
function extend(Child, Parent){
var F = function(){};
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.base = Parent.prototype;
}
function BaseClass(){
}
BaseClass.prototype.randomNumber = 0;
BaseClass.prototype.functionA = function(){
this.randomNumber = 200;
this.functionB();
}
BaseClass.prototype.functionB = function(){
alert(this.randomNumber);
console.info(this);
}
function ChildClass(){
this.functionB = function(){
ChildClass.base.functionB();
};
}
extend(ChildClass, BaseClass);
var childInstance = new ChildClass();
childInstance.functionA();
我用螢火蟲來登錄到控制檯。它輸出的「Baseclass」和this.randomNumber在某種程度上是0,而在functionA中它被設置爲200。
我使用的擴展方法與來自Yahoo.lang.extend的擴展方法類似,我也嘗試過使用相同的結果。
我不明白,如果我失去了一些東西,或者這只是「擴展」Javascript的缺點之一,我實際上在這裏調用「靜態」方法。在這裏非常感謝幫助。希望很清楚我在這裏要做什麼,因爲我覺得把它放在文字上很複雜。提前感謝!
非常好!這在我讀到關於Javascript繼承的書中沒有解釋。所以實際上我是在調用一個「靜態」方法。我檢查了你的鏈接(「神祕方法」)。使用ChildClass.base.functionB.call(this);訣竅。非常感謝! :) –
謝謝,我會看看它。類確實不是一個好的關鍵字,這就是爲什麼我用引號。在使用.call(this)時,我仍然遇到「this」的問題。我正在研究Javascript圖像旋轉木馬,但「這個」全都搞砸了。我在這裏放棄,這是可怕的語言。 –
@JustinvanSchaick:這並不糟糕,它與你以前的習慣不同。一旦你瞭解它,它是非常強大和靈活的。我並不是說這是一種完美的語言(沒有一種),我並不是說我沒有改進的東西,但是一旦你理解它,它就會非常非常好。 –