Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

Заметка про джаваскрипт

Больше часа потратил всяким гугленгием и экспериментами, и в итоге всё равно пришлось придумывать обходной маршрут. Проблема такая. Есть некий кусок джаваскрипта...
function () {
    ...
    function azaza515(obj) {
        ...
    }
    
    function azaza520(obj) {
        ...
    }
    
    function init(parameter) {
    	...
        var a = 'azaza' + parameter; // короче, как-то динамически собирается строка с именем функции
        // которую надо как-то вызвать из области видимости уровнем выше, но не глобальной
        
        var f = new Function(a + "()"); // не работает, потому что ищет в глобальной области видимости
        window[a](); // не работает по той же причине
        ...
        
        azaza520(); // естественно, работает. А чего б не работать-то
    }
}

Так и не смог такую штуку сделать. Вариант switch (parameter) { case ... } как-то уж очень сильно пахнет карри - там, может, десятки этих azaza-функций будут. В итоге сделал их свойствами объекта:
function () {
    ...
    
    var jopa = { 
        azaza515: function(obj) {
            ...
        },
        azaza520: function(obj) {
            ...
        }
    }
    
    function init(parameter) {
    	...
        var a = 'azaza' + parameter;
        ...
        if(jopa.hasOwnProperty(a)) jopa[a](); // так работает
    }
}

А в итоге-то, можно вызвать в джаваскрипте функцию из внешней области видимости, но не глобальной, если её имя хранится в строке?


UPD: Вариант во всеми так ненавидимом и презираемом PHP безо всякого eval():
function a() {
    function foo() {
        echo "foo\n";
    }
    function init() {
        $f = "foo";
        $f(); // несколько попроще конструкция, не правда ли?
    }
    init();
}
a();


Оригинал записи http://blog.axshavan.cz/2021/03/govno-kakoeto.html
Tags: web
Subscribe

  • Немного современной офисной архитектуры

    У нас на работе начальство думает сменить офис. Многие работают удалённо, многие - приходят два-три раза в неделю. Маркетологи разбились на две…

  • Как у меня дела (четверг)

    Постепенно жизнь возвращается в прежнее, ещё до-хоум-офисное, русло. А надо-то было всего ничего, неделю походить на работу в офис. Но, разумеется,…

  • Два дня в офисе

    Ах да, забыл написать пост :) Совсем заработался. Так вот, результат PCR-теста пришёл отрицательный примерно через 25 часов после того, как я его…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments