在闭包中调用函数

时间:2013-11-22 17:21:41

标签: javascript

我正在尝试创建一个这样的简单页面闭包:

page = function () {    

    // define functions

    function clickAdd() {
        //..
        return "55"
    };

    var that = {};

    // object to return
    that.clickAdd = clickAdd;

    return that;
}

想法是,我应该可以调用点击添加,然后......

page.clickAdd();

但是,我得到page.clickAdd is not a function.

我做错了什么?

3 个答案:

答案 0 :(得分:2)

问题是page是函数,返回具有clickAdd属性的对象。您必须首先调用该功能:

page() // Call page ...
  .clickAdd(); // which returns an object with a clickAdd() function

如果您不再需要保留page函数,您也可以调用匿名函数并将返回值设置为page

page = (function () {    
    return {
       clickAdd: function ()
       {
          return "55";
       }
    };
})();

现在,调用我们的匿名函数(注意最后的()),它返回一个带有clickAdd函数的对象,该对象设置为变量page。我们现在可以打电话:

page.clickAdd();

实质上,page现在就像静态类一样。

您还可以考虑将该函数作为对象文字的属性:

var page = {
   clickAdd: function ()
   {
      return "55";
   }
};

page.clickAdd();

答案 1 :(得分:1)

您只需执行外部函数即可将其返回值存储在page

page = function () {    

    // define functions

    function clickAdd() {
        //..
        return "55"
    };

    var that = {};

    // object to return
    that.clickAdd = clickAdd;

    return that;
}()

答案 2 :(得分:0)

页面是您的案例中的函数,因此您必须先调用它:

page().clickAdd();