2011-12-02 77 views
2

我收到來自Firebug的以下Javascript的page() is not defined錯誤消息。爲什麼?page()未定義錯誤消息

(function() { 
    var page = function() { 
     var min_central_width = 10; 
     function minimumCentralWidth(val) { 
      min_central_width = val; 
     } 
    } 

    $(document).ready(function() { 
     page().minimumCentralWidth(400); 
    }); 

})(); 

我還是Javascript的新手。我怎樣才能避免這種情況?

回答

4

問題是page沒有返回值,所以page()undefined。你將不得不這樣寫:

(function() { 
    var page = function() { 
     // create an object to return: 
     var ret = {}; 
     // set its properties: 
     ret.min_central_width = 10; 
     ret.minimumCentralWidth = 
      function (val) { 
       this.min_central_width = val; 
      }; 
     // return it: 
     return ret; 
    }; 

    $(document).ready(function() { 
     page().minimumCentralWidth(400); 
    }); 

})(); 

。 。 。但上面並沒有真正做任何事情。它創建一個新對象,並將該對象的min_central_width設置爲400。 。 。但它並不使用任何東西的對象,所以上面沒有任何有意義的效果。 (這是因爲你刪除了與該問題無關的代碼嗎?如果是這樣,那麼不要緊。:-)

+0

是的,我只是試圖用一個簡單的代碼示例複製問題。 – JVerstry

+0

@JVerstry:O.K.,很酷。 +1這樣做。 :-) – ruakh

2

儘管這裏有一些很好的答案,但我想補充一點,以提供一些可能的選擇取決於你在做什麼。

如果你真的想使minimumCentralWidth Page類的屬性,你可以這樣做:

(function() { 
    var page = function() { 
     var min_central_width = 10; 
     this.minimumCentralWidth = function (val) { 
      min_central_width = val; 
      alert('set to ' + val); 
     } 
    } 

    $(document).ready(function() { 
     var p = new page(); //new up your object 
     p.minimumCentralWidth(400); 
    }); 

})(); 

如果你試圖效仿的靜態實用類,你可以做這樣的事情:

(function() { 
    var page = new function() { //single instance of your page class 
     var min_central_width = 10; 
     this.minimumCentralWidth = function (val) { 
      min_central_width = val; 
      alert('set to ' + val); 
     } 
    } 

    $(document).ready(function() { 
     page.minimumCentralWidth(400); 
    }); 

})(); 

如果您對這些示例的工作方式有任何具體問題,請告訴我們,我會嘗試添加更多的細節!

+0

是的,我確實有一個問題。在第一個例子中,var p = new page();像Java中的new一樣創建一個新的頁面實例?意思是,如果我修改一個實例,其他實例是不會修改的? – JVerstry

+1

是的,這是非常正確的。你在'p'中改變的任何屬性都不會影響你已經'新建'的其他實例,因爲每個實例都在它自己的閉包中運行。 –