我创建了一个名为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 :(得分:1)
您必须创建实例:
var calendar = new NewsCalendar();
calendar.onLoad();
答案 1 :(得分:1)
尝试以下设置:
var NewsCalendar = (function () {
var privatevar;
var onLoadHandler = function () {
//Do Stuff
};
function getWeekStart(date) {
//Do Stuff
}
return {
onLoad: onLoadHandler
};
})();
然后使用:
NewsCalendar.onLoad();
返回的{}
中的任何内容都是公开的。周围函数内部的任何内容只能由其中的任何内容访问。
我建议使用此设置的原因是因为您似乎不希望立即显示多个对象,而是将其用作属性/方法库。