私が今日やろうとしているのは、継承メカニズム、マルチレベル継承、および親クラス構造の呼び出しに関するその他の側面を使用して、他の言語に近づける方法です。
達成したい効果:
関数 A( ){
alert('a');
function B(){
this.$supClass();
alert('b'); >}
extend(B,A);
関数 C(){
this.$supClass();
}
extend(C) ,B);
var c = new C();
alert( cinstanceof A ); //true
alert( cinstanceof C ); ; // true
例:
var fun = function(){},
プロトタイプ = subClass.prototype;
fun.prototype = supClass.prototype;
subClass.prototype = new fun();
for(プロトタイプの変数 i){
subClass.prototype[i] = プロトタイプ[i];
}
subClass.$supClass = supClass;
subClass.prototype.$supClass = function(){
var supClass = argument.callee.caller.$supClass;
if(typeof supClass == 'function'){
supClass.apply(this,arguments); $supClass = supClass;
}
};
subClass.prototype.constructor = subClass;
おそらく、
コードをコピー
subClass.prototype[i] = プロトタイプ[i];
}
subClass.prototype.$supClass = function(){
supClass.apply(this ,arguments);
};
subClass.prototype.constructor;
return subClass;
これは問題ないようです。ただし、継承レベルが 1 つしかない場合は、次の理由により無限ループが発生します。
コピー コード
コードは次のとおりです:
subClass.$supClass = function(){
supClass.apply(this,arguments); このメソッドは常に上書きされ、書き換えられるため、無限ループが発生します。 私のアプローチは、クラスの $supClass 属性を使用して、継承する親クラス構造を指すことです。プロトタイプには $supClass メソッドもあり、この $supClass はクラスのコンストラクターで実行する必要があります。初めて。プロトタイプ .$supClass が実行されると、arguments.callee.caller.$supClass を通じてクラスの $supClass を取得し、apply を通じてそれを実行します。 このようにして、$subClass はクラスの親クラス コンストラクターを取得し、さまざまな値に基づいて実行できます。