Как проверить, существует ли прототипированная функция?проверить, существует ли функция в javascript
Чуть больше объяснений:
Как вы можете видеть в примере кода, я всегда буду иметь commonFunction()
как для X1
и X2
.
Я хотел бы сообщить, если X1
и X2
имеют свои собственные myOwnFunction()
.
Важно заметить, что из первых рук я не знаю, какую функцию я буду называть. Вот почему мне нужен динамический способ сбора этой информации.
КОД:
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/
Что происходит, когда контекст становится неопределенным до достижения цели? EDIT: Я вижу, что это именно то, что произошло в вашей скрипке. – Adam
@ Адам Извините, я вас не понял. Вы можете мне объяснить? –
По-прежнему устанавливается прототип внутри тела конструктора, это неправильно. Вы хоть представляете, для чего нужен прототип? http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711, чтобы проверить, какие свойства у объекта вы можете использовать 'for (something in myObject)' 'hasOwnProperty' и перейти к конструктору' myObject = myObject.constructor', пока вы не достигнете функции. Но так, как вы наследуете сейчас, вы уничтожаете свойство конструктора на прототипе объекта. – HMR