ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript クラス継承_js オブジェクト指向の新しい試み

JavaScript クラス継承_js オブジェクト指向の新しい試み

WBOY
WBOYオリジナル
2016-05-16 17:57:25854ブラウズ

私が今日やろうとしているのは、継承メカニズム、マルチレベル継承、および親クラス構造の呼び出しに関するその他の側面を使用して、他の言語に近づける方法です。
達成したい効果:

コードをコピー コードは次のとおりです:

関数 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


例:




[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、更新して実行する必要があります ] My extend は次のように記述されます:


コードをコピー コードは次のとおりです: 関数 extend (subClass,supClass){
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;


おそらく、



コードをコピー

コードは次のとおりです。 function extend(subClass ,supClass){ var fun = function( ){}, prototype = subClass.prototype; subClass.prototype = new fun(); >for(プロトタイプの変数 i){
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 はクラスの親クラス コンストラクターを取得し、さまざまな値に基づいて実行できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。