如何檢查原型函數是否存在?檢查javascript中是否存在函數
多一點解釋:
正如你可以在示例代碼中看到的,我將永遠有兩個X1
和X2
一個commonFunction()
。
我想告訴你X1
和X2
有他們自己的myOwnFunction()
。
重要的是要注意到,第一手我不知道我會打電話給哪個功能。這就是爲什麼我需要一種動態的方式來收集這些信息。
CODE:
function FunctionMain(){};
FunctionMain.FunctionSub = new FunctionSub();
function FunctionX1()
{
FunctionX1.prototype.commonFunction = function()
{
console.log("Hello, I'm X1");
}
FunctionX1.prototype.myOwnFunctionX1 = function()
{
console.log("This my own function");
}
}
function FunctionX2()
{
FunctionX2.prototype.commonFunction = function()
{
console.log("Hello, I'm X2");
}
//I don't have myOwnFunctionX2()
}
function FunctionSub()
{
FunctionSub.prototype.FunctionX1 = new FunctionX1();
FunctionSub.prototype.FunctionX2 = new FunctionX2();
}
//This call works!
FunctionMain.FunctionSub.FunctionX1.commonFunction();
FunctionMain.FunctionSub.FunctionX2.commonFunction();
//what kind of test should I use?
if(typeof "FunctionMain.FunctionSub.FunctionX1.myOwnFunctionX1" == "function")
{
console.log("It exists!");
}
if(typeof window["FunctionMain.FunctionSub.FunctionX1.myOwnFunctionX1"] == "function")
{
console.log("It exists!");
}
FIDDLE:http://jsfiddle.net/matias/FTzjW/
當在達到最終結果之前上下文變得未定義時會發生什麼?編輯:我看到這正是你的小提琴中發生的事情。 – Adam
@亞當我很抱歉,我不瞭解你。你能解釋我嗎? –
仍然在構造函數體內設置原型,這是錯誤的。你有什麼想法是什麼樣的原型? http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711檢查對象有什麼屬性可以使用'for(something in myObject)'hasOwnProperty'並且上去構造函數' myObject = myObject.constructor'直到你到達Function。但是現在你繼承的方式是銷燬對象原型的構造函數屬性。 – HMR