Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование eval() для вызова метода, окружение не webbrowser'а 
:(
    Опции темы
Remir
Дата 23.1.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Имеем:

1. несколько объектов (bolder, paper, ... etc)
2. некоторое кол-во методов у каждого из объектов (get, drop, ...)
3. переменные:
    selectedObject - имя обно из объектов
    selectedMethod  - имя одного из методов принадлежащих выбранному объекту
Вопрос:
 Как с помощью eval() организовать вызов метода  (скажем Bolder.drop();) ?

Имена объектов и их методов в данной строке должны меняться динамически, скажем(selectedObject.selectedMethod())



PM MAIL   Вверх
Zeroglif
Дата 23.1.2007, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Remir @  23.1.2007,  13:07 Найти цитируемый пост)
Имена объектов и их методов в данной строке должны меняться динамически

Скобочная нотация не подойдет?

Код

var o1 = {
    m1 : function () {alert('m1')},
    m2 : function () {alert('m2')}
}

var o2 = {
    m1 : function () {alert('m1')},
    m2 : function () {alert('m2')}
}

window['o1']['m1']();
window['o2']['m2']();


Имена объектов и методов в данном случае - это строки, соответственно, динамику можно организовать.  Потому как переменную к переменной не прицепишь, если только:

Код

var obj = o1;
var obj_method = o1.m1;
obj_method.apply(obj);

PM MAIL WWW   Вверх
Remir
Дата 23.1.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Цитата

Имена объектов и методов в данном случае - это строки, ...


не совсем так.

в моем случае m1 - не строка а ф-ция.

И еще, забыл уточнить, скрипт используется не в среде web - т.е. window, alert, etc. - это не используется.


Код

eval[selectedObject].lock();


Да здесь я могу получить вызов метода lock() к различным объектам присваивая selectedObject их имена а вот как в этой же строке  (ну или) изменить значение после точки т.е. lock() на open() ???
PM MAIL   Вверх
Zeroglif
Дата 23.1.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



lock - это имя метода, метод можно вызвать или obj.lock(), или obj['lock']() , во втором случае можно использовать переменную, например, var x = 'lock'; obj[x]();

Будет проще понять, если будет код. Пока всё туманно.
PM MAIL WWW   Вверх
Remir
Дата 23.1.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Да собственно тут код чисто для наглядности
Код

function obj(id){
    this.name = id;

    //метод 1
    this.close = function(){
    }//end of function
    
    //метод 2
    this.open = function(){
    }//end of function
    
    //метод 3
    this.lock = function(){
    }//end of function

}//end of function


    object1 = new obj(1);
    object2 = new obj(2)
    
    
    var selectedObject = "object1";
    var selectedMethod = "open";
    
    
    eval[selectedObject].lock(); // выполняется 
    
    
    /* как трансформировать эту строку чтобы методы мона было менять в переменной selectedMethod
    и обращаться к ним без проблем?
    */

PM MAIL   Вверх
Zeroglif
Дата 23.1.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Третий раз пробую ответить - скобочная нотация. Если с eval (не знаю, что за среда), то:

Код

eval(selectedObject)[selectedMethod]();

А браузерах selectedObject можно вывести из-под eval:

Код

window[selectedObject][selectedMethod]();

PM MAIL WWW   Вверх
Remir
Дата 23.1.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.1.2007

Репутация: нет
Всего: нет



Zeroglif,  пасиб за старания. 
да я поробовал 
Цитата

eval(selectedObject)[selectedMethod]();


но в результате получаю  только определение "object1" - отсутствует. smile((

Печально все как-то.

Добавлено @ 16:09 
ЕСТЬ ! работает smile


Код

eval[selectedObject][selectedMethod]();


Вот в таком виде работает!
Мдя....

учится учиться и еще раз поспать smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.