javascript - 无法访问对象方法

标签 javascript

我创建了一个名为 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/

相关文章:

javascript - 我怎样才能在 Html 中嵌入一个小图像(图标)一次并多次解压它?

Javascript 访问器属性混淆

javascript - Jquery 淡出一一

JavaScript - 使用数组检查字符串

javascript - Angular2 ExceptionHandler - 检查错误对象是否为 Response

javascript - TypeScript 编译上下文中包含 app.component.ts 的错误

javascript - 通过javascript获取原始/未修改的请求字符串

javascript - NodeIntegration不起作用[Electron/js]

javascript - React Router - 如何动态替换字符串中的参数

javascript - 通过IE6浏览时完全禁用JS的最简单方法