我创建了一个名为 NewsCalendar 的准命名空间/类。我的目的是避免污染全局命名空间以及隐藏应该私有(private)的函数。但是,当我尝试调用应该是公共(public)方法的内容时,我得到“对象不支持此属性或方法。”
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() 调用附加到其 this 对象的任何变量/方法。
最佳答案
尝试以下设置:
var NewsCalendar = (function () {
var privatevar;
var onLoadHandler = function () {
//Do Stuff
};
function getWeekStart(date) {
//Do Stuff
}
return {
onLoad: onLoadHandler
};
})();
然后使用:
NewsCalendar.onLoad();
返回的 {}
中的所有内容都是公开的。周围函数内部的任何内容都只能由其内部的任何内容访问。
我建议这种设置的原因是因为您似乎不想实例化多个对象,而是将其用作属性/方法库。
关于javascript - 无法访问对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447973/