Как сделать метод объекта IIFE? - PullRequest
0 голосов
/ 12 ноября 2018

Я пытался сделать метод объекта простым, но мне совсем не повезло. Является ли это возможным? Мы храним все наши функции как методы, пытаясь их организовать.

Я выбрал ОДИН объект и один метод, чтобы проиллюстрировать, что я пытаюсь сделать, хотя у нас их гораздо больше.

Я бы хотел их узнать, потому что, как только они начнут стрелять, они выполнили свою работу и больше не нужны, учитывая это вместе с тем, сколько у нас будет методов, для меня это делает иф-фу им.

Мой код:

let trans = {
    bind_toggle: function(){
        if ($('.tw-o').length != 0) {
            // window open, add toggle
            $('.tw-h').click(function(e){
                $('.tw-b').toggle(599);
            });
        }
    } 
}

Я бы хотел, чтобы trans.bind_toggle вызывался без необходимости называть его сам ... IIFE, но я не смог его осуществить. Я пробовал:

let trans = {
    bind_toggle: (function(){
        if ($('.tw-o').length != 0) {
            // window open, add toggle
            $('.tw-h').click(function(e){
                $('.tw-b').toggle(599);
            })();
        }
    } 
}

Вышеуказанное возвращает

Uncaught TypeError: trans.bind_toggle не является функцией

Можно ли использовать IIFE в объекте? если так, как бы я это сделал?

Спасибо:)

1 Ответ

0 голосов
/ 12 ноября 2018

Вместо того чтобы хранить функции с одним таймером в объекте, я бы предложил вам обернуть весь код в IIFE, а затем объявить одноразовые таймеры в области действия этой функции или сделать их IIFE, как в примерениже.Таким образом, они будут прилично собраны мусором после запуска IIFE.Примерно так:

(function () {
    (function () {
        // Logig for bind_toggle
    }());
    // All the rest of your code
}());

Имея весь код в IIFE, вы также можете избежать объявления большинства глобальных переменных.Если глобальный элемент действительно необходим, вы можете определить его как свойство окна, например window.someGlobal = 1.

...