Javascript - 如何调用自调用函数中的方法?

时间:2015-01-23 18:12:46

标签: javascript self-invoking-function

在下面的代码中

(function x() {
var j = function() { alert("234234"); }
return {
    s: j
}
})()

var x1 = new x();
x1.s();

如何调用方法j()?或者之前我应该​​问,有没有办法创建函数x()的实例,因为这就是正在发生的事情。请参阅小提琴http://jsfiddle.net/e5k6bdvn/

2 个答案:

答案 0 :(得分:7)

  1. 不要给自调用函数一个名称(除了在堆栈跟踪中更容易找到它之外没有什么好处,你不应该在那时找到它,并且它在旧IE中的内存泄漏)
  2. 不要两次调用自我调用功能
  3. 不要将自调用函数视为构造函数(通过new调用它)
  4. 捕获自调用函数的返回值
  5. 这样:

        var x = (function () {
            var j = function() { alert("234234"); };
            return {
                s: j
            };
        })();
        
        x.s();


    或者,如果您想以相同的方式创建多个对象:

    1. 不要使用自我调用功能
    2. 根据需要多次拨打x
    3. 这样:

          function x () {
              var j = function() { alert("234234"); };
              return {
                  s: j
              };
          };
      
          var x1 = x();
          var x2 = x();
          x1.s();


      或者,如果要创建构造函数:

      1. 不要从中归还任何东西
      2. 使用原型链
      3. 这样:

            function x () {
            };
        
            x.prototype.s = function () {
                alert("234234");
            }
            
            var x1 = new x();
            var x2 = new x();
            x1.s();

答案 1 :(得分:0)

如@epascarello所述,很难说你问题的背景是什么。

如果x的含义是多次返回对象,则不应立即调用它。相反,你只需要声明它:

function x () { return { j: function () { alert("234234") } } }

然后随时调用它,并调用j

var x1 = x();
x1.j();

如果您计划仅使用x一次,最好立即调用它,但您也需要立即使用j的呼叫。

(function () {
    return {
        j: function () {
            alert("234234")
        }
    }
})().j();