我定義瞭如何將兩個功能可以相互繼承如下:實施isInstance在Javascript
Function.prototype.inherit = function(parent){
function proto() {}
proto.prototype = parent.prototype;
this.prototype = new proto();
this.prototype.constructor = this;
this.prototype.parent = parent;
}
然後我需要定義一個isInstance功能會表現得像Java的}這種或PHP的的instanceof。實質上,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);
}
}
}
比較兩個函數時,而不是比較實例變量時,工作正常。
Object2.inherit(Object1);
Object2.isInstance(Object1); //returns true
var obj2 = new Object2();
obj2.isInstance(Object1);// obj2.isInstance is not a function
上面的最後一種情況是我想要工作。我如何將isInstance添加到實例中,而不僅僅是函數?對於所有的JavaScript專家,有沒有對我的代碼(繼承方法,也許)有任何改進?
謝謝。
啊,我想每個人都試圖在javascript中編寫自己的OO系統。這非常有趣 - 真正展現了語言的真正靈活性。我認爲沒有人真的爲生產做這件事 - 這都是關於樂趣的。 – x0n 2009-10-03 16:30:22
+1 - 有趣的觀點。但是我仍然想知道如何做到這一點(即使正如你所說,解決方案無法覆蓋邊緣)。 – 2009-10-03 16:41:11