0
說我有一個抽象類如何在javascript中擴展一個抽象類,併爲閉包編譯器註釋但沒有閉包庫?
/**@constructor
* @abstract*/
function AbsFoo(){}
/**@return {number}
* @param {number} a
* @param {number} b */
AbsFoo.prototype.aPlusB = function(a,b){
return a + b
};
/**@abstract
* @return {number}
* @param {number} c
* @param {number} d */
AbsFoo.prototype.cMinusD = function(c,d){}; //extending class need to implement.
,我想擴展這個類,通常情況下,我會做類似
/**@constructor
* @extends {AbsFoo} */
function Foo(){
AbsFoo.apply(this);
}
Foo.prototype = new AbsFoo();
Foo.prototype.constructor = Foo;
Foo.prototype.doSomething = function(c,d){
return c - d;
};
但關閉編譯器
JSC_INSTANTIATE_ABSTRACT_CLASS: cannot instantiate abstract class
闖民宅說要該行Foo.prototype = new AbsFoo();
那麼如何ld我這樣做是爲了保持原型的繼承性,以及在整個類鏈上使用instanceof
的能力,同時也讓編譯器感到高興?
如果你看看goog.inherits的代碼,我已經做了大部分的功能。 – Julian
其實.....這個工程。我的意思是我做了一點不同,但它基本上是一樣的。但它似乎工作,因爲goog.inherits函數創建一個新的類,這是一個抽象類,就像父類和子類之間的橋樑。 bridge類是一個抽象類,但沒有註釋,因此編譯器在爲子類原型創建實例時不會給出警告.... ....我覺得可能@abstract註釋尚未處於穩定狀態。我很確定這是相當新的......無論如何,謝謝你的答案! – Julian
Closure Compiler最近升級了對抽象類的處理,這是正確的。根據我的經驗,使用抽象類找到問題會更加一致,這就是您遇到的問題。 – owler