2013-11-22 85 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(); 
相關問題