2013-10-09 7 views
0

Мне нужно знать, понимает ли прототип класс метод. Например:Javascript: как перехватить все прототипы функций класса?

MyClass.prototype.myMethod1 = function() { 
    ... 
    return "Hello World!"; 
}; 

MyClass.prototype.myMethod2 = function() { 
    ... 
    return "Bye World!"; 
}; 

MyClass.prototype.caller = function(functionName){ //This is the method that I need to know 
    if (functionName == "myMethod1") return "Exist!, is myMethod1."; 
    if (functionName == "myMethod2") return "Exist!, is myMethod2."; 
    return "Sorry, it doesn't exists here."; 
} 

Это всего лишь плохой пример. Мне нужно определить, не понят ли метод для MyClass и в этом случае делегировать его.

Спасибо!

ответ

0

Это не реальный ответ на вопрос. Проблема была решена в комментариях. Ответ на этот вопрос отсутствует, потому что у Javascript нет магических методов.

Значит, вам нужно проверить, имеет ли объект определенный метод? Я думаю, что это то, что вы ищете:

MyClass.prototype.caller = function(functionName) { 
    // Check whether the property is a function 
    if (typeof(this[functionName]) == "function") { 
     // Method exists 
     return true; 
    } else { 
     // Method does not exist 
     return false; 
    } 
}; 
+0

Да, но _caller_ не существует. Мне нужно знать, как изменить _MyClass_ для проверки при неправильном вызове. Если бы я не _MyClass_ выполнял эту функцию, но если бы я это сделал, _MyClass_ должен предупредить меня или делегировать его другому классу. – Lmyr

+0

@Lmyr Вы имеете в виду функцию, которая будет вызываться всякий раз, когда вы пытаетесь вызвать функцию, которая не существует? – Butt4cak3

+0

Да! Как адаптер. Мне нужно пройти между вызовом функции и ее исполнением. – Lmyr

0

Можно перебирать каждый метод и свойство в прототипе MyClass с помощью:

MyClass.prototype.hasMethod = function(name) { 
    for (key in this) { 
    if (key == name) 
     return true; 
    } 
    return false; 
} 
+0

Мне нужно что-то подобное, но без переопределения функции hasMethod. Мне нужно, чтобы _MyClass_ проверял его, прежде чем пытаться выполнить любую его функцию. – Lmyr

Смежные вопросы