2013-11-22 42 views
0

我想CREAE一个simpe页面关闭这样的:调用一个函数在闭包

page = function() {  

    // define functions 

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

    var that = {}; 

    // object to return 
    that.clickAdd = clickAdd; 

    return that; 
} 

想法是,我应该能够调用clickAdd作为然后...

page.clickAdd(); 

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

我做错了什么?

回答

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

你只需要执行外部函数来获取其存储在page中的返回值。

page = function() {  

    // define functions 

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

    var that = {}; 

    // object to return 
    that.clickAdd = clickAdd; 

    return that; 
}() 
+3

为什么这降低了?这是正确的。 –

+0

这是正确的@ down选民。 –

0

页是你的情况的功能,所以你必须先调用它:

page().clickAdd(); 
相关问题