Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2012, 13:34
Новичок на форуме
Отправить личное сообщение для Ваня в бане Посмотреть профиль Найти все сообщения от Ваня в бане
 
Регистрация: 28.09.2011
Сообщений: 2

Вызов метода
У меня есть набор объектов и их методов
var notes = {
    'add':function(){}
  , 'del':function(){}
}
var store = {
    'new':function(){}
  , 'get':function(){}
}

Появилась потребность вызывать методы, получая из другого приложения строку типа 'notes.add'.

Как это можно реализовать без использования eval()? Буду очень благодарен за ответ.
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2012, 13:40
Интересующийся
Отправить личное сообщение для irezvov Посмотреть профиль Найти все сообщения от irezvov
 
Регистрация: 24.11.2011
Сообщений: 24

var parts = 'notes.add'.split('.'),
    obj = parts[0],
    method = parts[1];
window[obj][method].call(window[obj]);
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2012, 13:55
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Разбиваете строку например с помощью split, если вы уверены что строка всегда будет приходить валидная, получаете массив названий вложенных пространств иен. Затем начиная от корня пространства имен (если notes и store - глобальны, то это window) начинаете добираться до вашего метода и потом его вызываете.
var str = "my.deep.deep.namespace.and.method";

var pkgs = str.split("."), // Если вы не уверены что строка 100% валидная, то надо парсить регуляркой и проверять лишние точки, точки в начале, в конце и прочее, но думаю это лишнее

root= window;

for (var i = 0, l = pkgs.length; i < l; i ++) {
    root = root[pkgs[i]]; //   Тут не плохо бы проверять, есть ли на этом месте объект
}

root();


Это был грубый пример. Если вы себе сами пишете эти методы и сами себе присылаете строки, то есть вам не подсунут зловещий код 100%, пользуйтесь eval, почему нет..
__________________
readOnly
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двойной вызов функции Tmin10 jQuery 8 08.12.2011 15:19
Вызов метода через setTimeout из самого себя leoHex Events/DOM/Window 2 18.04.2011 00:28
Наследование класса-замыкания и вызов метода предка BobiKK Общие вопросы Javascript 2 21.03.2010 13:26
AJAX, вызов из метода обьекта Logo Общие вопросы Javascript 4 20.06.2009 23:35
вызов метода return для функции-родителя evgen28 Общие вопросы Javascript 17 22.01.2009 15:46