欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript類式繼承新的嘗試

 更新時間:2012年01月09日 16:35:53   作者:  
研究javascript是很有意思的事情,以前我說過,在javascript中的繼承,在于維持prototype指向同一object就行了,確實這樣
我今天做的嘗試是,如何更它更像其他的語言一樣的使用繼承機制,多層繼承和更方面的調(diào)用父類的構(gòu)造。
我希望達(dá)到的效果:
復(fù)制代碼 代碼如下:

function A(){
alert('a');
}
function B(){
this.$supClass();
alert('b');
}
extend(B,A);
function C(){
this.$supClass();
alert('c');
}
extend(C,B);
var c = new C();
alert( c instanceof A ); //true
alert( c instanceof B ); //true
alert( c instanceof C ); //true

實例:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

我的extend是這樣寫的:
復(fù)制代碼 代碼如下:
 
function extend(subClass,supClass){ 
var fun = function(){}, 
prototype = subClass.prototype; 
fun.prototype = supClass.prototype; 
subClass.prototype = new fun(); 
for(var i in prototype){ 
subClass.prototype[i] = prototype[i]; 

subClass.$supClass = supClass; 
subClass.prototype.$supClass = function(){ 
var supClass = arguments.callee.caller.$supClass; 
if(typeof supClass == 'function'){ 
supClass.apply(this,arguments); 
this.$supClass = supClass; 

}; 
subClass.prototype.constructor = subClass; 
return subClass; 
}

也許你會問,為什么不這樣寫:
復(fù)制代碼 代碼如下:

function extend(subClass,supClass){
var fun = function(){},
prototype = subClass.prototype;
fun.prototype = supClass.prototype;
subClass.prototype = new fun();
for(var i in prototype){
subClass.prototype[i] = prototype[i];
}
subClass.prototype.$supClass = function(){
supClass.apply(this,arguments);
};
subClass.prototype.constructor = subClass;
return subClass;
}

這樣看似沒有問題,只有一級繼承時會運行的很好,但是,如果多級繼承時,就會造成死循環(huán),因為:
復(fù)制代碼 代碼如下:

subClass.prototype.$supClass = function(){
supClass.apply(this,arguments);
};

這個方法會被一直覆蓋重寫掉,而造成死循環(huán)。
而我的做法是,用類的$supClass屬性指向它所繼承的父類構(gòu)造,在prototype中也有個$supClass方法,這個$supClass第一次必須要在類的構(gòu)造器中執(zhí)行,prototype.$supClass在執(zhí)行時,會通過arguments.callee.caller.$supClass來獲得類的$supClass,然后通過apply在this執(zhí)行。 這樣$subClass就能根據(jù)不同的來,來獲得類的父類構(gòu)造器并執(zhí)行。

相關(guān)文章

最新評論