如何使对象方法成为 IIFE?

How to make an Object method an IIFE?

我一直在努力使一个对象方法成为一种生活,但我一点运气都没有。可能吗?我们将所有函数存储为方法,以试图使它们井井有条。

我选择了一个对象和一种方法来说明我正在尝试做的事情,尽管我们还有更多。

我想对它们进行 IIFe-fy,因为一旦它们开始启动,它们就完成了它们的工作并且不再需要,考虑到这一点以及我们将拥有多少方法,对我来说让他们过上幸福的生活。

我的代码是:

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);
            })();
        }
    } 
}

以上returns

Uncaught TypeError: trans.bind_toggle is not a function

是否可以在对象中使用 IIFE?如果可以,我该怎么做?

谢谢:)

我建议您将所有代码包装在一个 IIFE 中,而不是将一次性函数存储在一个对象中,然后在该函数的范围内声明一次性函数,或者像在下面的例子。这样,在 IIFE 运行 之后,它们将被适当地垃圾收集。像这样:

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

将所有代码都放在 IIFE 中,您也可以避免声明大部分全局变量。如果确实需要全局,您可以将其定义为 window 的 属性,例如 window.someGlobal = 1.