Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2012, 22:49
Новичок на форуме
Отправить личное сообщение для alex1covo Посмотреть профиль Найти все сообщения от alex1covo
 
Регистрация: 26.03.2012
Сообщений: 3

Проверка существования метода
Доброе время суток!

Помогите пожалуйста проверить существование метода объекта, если название объекта и метода приходят в строке. Например вот так

var Test = {
   Test : function(){ }
}

var v = 'Test.Test';

//1
alert( typeof v == 'function' ); //false, оно и понятно почему

//2
eval( "alert( typeof "+v+" == 'function' );" ) //true, но помоему это не очень хорошо


Вопрос заключается в том, как исполнить проверку используя typeof, но без eval-а?
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2012, 23:08
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var Test = {
   Test : function(){ }
}
 
var v = 'Test.Test';
 
//1
alert( typeof v == 'function' ); //false, оно и понятно почему
 
//2
eval( "alert( typeof v == 'function' );" ) //false
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2012, 23:12
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от alex1covo
Вопрос заключается в том, как исполнить проверку используя typeof, но без eval-а?
var Test = {
   Test : function(){ }
}
  
var v = 'Test.Test';
alert( typeof ( new Function('return ' + v)() ) == 'function' );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2012, 23:21
Новичок на форуме
Отправить личное сообщение для alex1covo Посмотреть профиль Найти все сообщения от alex1covo
 
Регистрация: 26.03.2012
Сообщений: 3

Принцип, ясен. Спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2012, 00:38
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

devote, это по сути тот же eval, только сыммитированный через Function
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2012, 00:45
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Раед
devote, это по сути тот же eval, только сыммитированный через Function
а кто спорит? он просил без eval я ему дал без eval. Все вполне честно
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #7 (permalink)  
Старый 27.03.2012, 16:46
Новичок на форуме
Отправить личное сообщение для alex1covo Посмотреть профиль Найти все сообщения от alex1covo
 
Регистрация: 26.03.2012
Сообщений: 3

Мне понятно, что создание анонимной функции с помощью 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. Для простоты.

Последний раз редактировалось alex1covo, 27.03.2012 в 16:50.
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка существования файла Danie Ваши сайты и скрипты 4 23.02.2012 17:56
htaccess: проверка существования файла greatilya Серверные языки и технологии 0 09.02.2012 09:00
Помогите найти ошибку... AJAX проверка существования e-mail в БД Murmurianez AJAX и COMET 1 03.08.2011 18:49
Проверка существования лгина Dmitrri Элементы интерфейса 3 13.01.2010 12:01
Проверка существования входного параметра для функции Axe Я не знаю javascript 2 25.05.2009 14:58