2つの関数が相互に継承する方法を次のように定義します。
Function.prototype.inherit = function(parent){
function proto() {}
proto.prototype = parent.prototype;
this.prototype = new proto();
this.prototype.constructor = this;
this.prototype.parent = parent;
}
次に、JavaのinstanceOfまたはPHPのinstanceofのように動作するisInstance関数を定義する必要があります。本質的に、isInstanceを使用して、変数が親関数から継承する関数のインスタンス化されたオブジェクトであるかどうかを判断できます。
これは私が書いたものです:
Function.prototype.isInstance = function(func){
if(this == func){
return true;
} else{
if (this.prototype.parent == undefined || this.prototype.parent == null) {
return false;
} else {
return this.prototype.parent.isInstance(func);
}
}
}
これは、2つの関数を比較する場合は正常に機能しますが、インスタンス化された変数を比較する場合は機能しません。
Object2.inherit(Object1);
Object2.isInstance(Object1); //returns true
var obj2 = new Object2();
obj2.isInstance(Object1);// obj2.isInstance is not a function
上記の最後のケースは、私が働きたいものです。関数だけでなく、インスタンスにisInstanceを追加するにはどうすればよいですか?そして、そこにあるすべてのjavascriptの達人にとって、私のコード(おそらくinheritメソッド)に何か改善はありますか?
ありがとう。