ФорумПрограммированиеJavaScript → Надоть callback без eval

Надоть callback без eval

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 9 ноября 2010 г. 3:40

    <script type="text/javascript">
    // первый подопытный
    function myFunc(a){
    alert('This is myFunc. ' + a);
    }
    // второй подопытный
    obj = {
    myFunc: function(a){
    alert('This is obj.myFunc. ' + a);
    }
    }
    // объект, производящий callback вызов
    starter = {
    callback: null,

    call: function(){
    window[this.callback](this.callback);
    }

    }

    starter.callback = 'myFunc'; // назначаем обработчиком функцию
    starter.call(); // работает

    starter.callback = 'obj.myFunc'; // назначаем обработчиком метод объекта
    starter.call(); // Ошибка: window[this.callback] is not a function
    </script>

    Как сотворить рабочий вариант для обоих подопытных?
    Eval не предлагать :)
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 9 ноября 2010 г. 4:40, спустя 59 минут 32 секунды

    так, чувак, недавно эта тема пробегала, может быть даже ты и создавал тему. Давайте не будем плодить 100500 дубликатов, ок?
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 9 ноября 2010 г. 4:46, спустя 5 минут 52 секунды

    почитай про фукцнии и замыкания, думаю натолкнет на мысли :)
    Сапожник без сапог
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 9 ноября 2010 г. 6:19, спустя 1 час 33 минуты 53 секунды

    Нет, чувак, тему создавал не я и там решения так и нет.

    Читал я, Дуд, и про и про сё. Не выходит нифига.

    Cуть в том, что мне надо передавать именно название функции.
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 9 ноября 2010 г. 6:50, спустя 30 минут 9 секунд

    А почему бы тебе объект и метод не передавать отдельно:
    starter.obj = obj; 
    starter.callback = 'myFunc';


    А потом вызывать:
    call: function(){
    this.obj[this.callback]();
    }
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 9 ноября 2010 г. 12:40, спустя 5 часов 49 минут 57 секунд

    AlexB, а если юзер захочет указать "obj.obg2.func"
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 9 ноября 2010 г. 12:45, спустя 5 минут 19 секунд

    AndryG, передавай объект функции и не еби мозг
    Сапожник без сапог
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 9 ноября 2010 г. 14:09, спустя 1 час 23 минуты 40 секунд


    AlexB, а если юзер захочет указать "obj.obg2.func"
    Я же не знаю для чего тебе это надо и какие нужны возможности … ну передавай массив объектов. Сути дела не меняет, главное мухи - отдельно, котлеты - отдельно.
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 10 ноября 2010 г. 6:31, спустя 16 часов 22 минуты 19 секунд

    Ачивидно, если читали про замыкания, как утверждаете:
    starter.callback = (function() { return obj.myFunc(); });
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 10 ноября 2010 г. 7:57, спустя 1 час 25 минут 41 секунду

    vasa_c, ну дык ему же именно строку надо передать, как я понял …

Пожалуйста, авторизуйтесь, чтобы написать комментарий!