Проверка существования метода
Доброе время суток!
Помогите пожалуйста проверить существование метода объекта, если название объекта и метода приходят в строке. Например вот так
var Test = {
Test : function(){ }
}
var v = 'Test.Test';
//1
alert( typeof v == 'function' ); //false, оно и понятно почему
//2
eval( "alert( typeof "+v+" == 'function' );" ) //true, но помоему это не очень хорошо
Вопрос заключается в том, как исполнить проверку используя typeof, но без eval-а? |
var Test = {
Test : function(){ }
}
var v = 'Test.Test';
//1
alert( typeof v == 'function' ); //false, оно и понятно почему
//2
eval( "alert( typeof v == 'function' );" ) //false
|
Цитата:
var Test = {
Test : function(){ }
}
var v = 'Test.Test';
alert( typeof ( new Function('return ' + v)() ) == 'function' );
|
Принцип, ясен. Спасибо!
|
devote, это по сути тот же eval, только сыммитированный через Function
|
Цитата:
|
Мне понятно, что создание анонимной функции с помощью new Function это тот же eval.
Решил спросить потому, что кроме eval в голову приходил вариант с возвратом ссылки на метод:
var Test = {
Test : function(){ alert( 'Hello' ) }
}
var v = 'Test.Test';
//для простоты без всяких проверок
function _( v ){
var w = window;
v = v.split( '.' );
for( i in v ) w = w[ v[ i ] ]
return w;
}
alert( typeof _( 'Test.Test' ) ); //function
//вызов
_( 'Test.Test' )(); //Hello
Хотелось как-то попроще, думал синтаксис позволяет. Наверное мой случай это когда надо использовать eval. Для простоты. |
| Часовой пояс GMT +3, время: 17:39. |