2013-05-08 176 views
0

我創建了一個名爲NewsCalendar的準名稱空間/類。我的目的是避免污染全局名稱空間以及隱藏應該是私有的函數。但是當我嘗試調用什麼應該是公共方法時,我會得到「對象不支持此屬性或方法。」無法訪問對象方法

function NewsCalendar() 
{ 
    var privatevar; //private vars 

    this.onLoad = function() //public method 
    { 
     //Do Stuff 
    }; 

    function getWeekStart(date) //private function 
    { 
     //Do Stuff 
    } 
} 

評論意見是表明我打算如何打算每個項目的行爲。

我試圖調用的onLoad函數是這樣的:

NewsCalendar.onLoad(); 

但是,這會導致「對象不支持此屬性或方法」錯誤。我想能夠像命名空間一樣使用NewsCalendar,並且能夠通過使用NewsCalendar.propertyname或NewsCalendar.methodname()來調用附加到其對象的任何變量/方法。

+0

你最終找到答案了嗎?如果是這樣,選擇一個並接受它。否則,請解釋發生了什麼 – Ian 2013-05-17 16:44:38

+0

您的工作。我只是不喜歡這樣使用回報。不是你的錯,有時候我發現javascript語法真的很難看。 – Legion 2013-05-17 16:58:06

回答

1

請嘗試以下設置:

var NewsCalendar = (function() { 
    var privatevar; 

    var onLoadHandler = function() { 
     //Do Stuff 
    }; 

    function getWeekStart(date) { 
     //Do Stuff 
    } 

    return { 
     onLoad: onLoadHandler 
    }; 
})(); 

然後用:

NewsCalendar.onLoad(); 

凡是在返回{}是公開的。任何內部的功能只能由其內部的任何東西訪問。

我建議這個設置的原因是因爲你似乎不想立即使用幾個對象,而是將它用作屬性/方法的庫。

1

你必須創建實例:

var calendar = new NewsCalendar(); 
calendar.onLoad();