【问题标题】:Can't access object method无法访问对象方法
【发布时间】:2013-05-03 02:44:30
【问题描述】:

我创建了一个名为 NewsCalendar 的准命名空间/类。我的目的是避免污染全局命名空间以及隐藏应该是私有的函数。但是当我尝试调用应该是公共方法时,我得到“对象不支持此属性或方法。”

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

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

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

这些 cmets 用于指示我打算如何处理每个项目。

我尝试这样调用 onLoad 函数:

NewsCalendar.onLoad();

但这会导致“对象不支持此属性或方法”错误。我希望能够像命名空间一样使用 NewsCalendar,并能够通过使用 NewsCalendar.propertyname 或 NewsCalendar.methodname() 调用附加到其 this 对象的任何变量/方法。

【问题讨论】:

  • 您最终找到答案了吗?如果是这样,请选择一个并接受它。否则,解释发生了什么
  • 你的作品。我只是不喜欢那样使用 return 。不是你的错,我只是觉得 javascript 语法有时真的很难看。

标签: javascript


【解决方案1】:

尝试以下设置:

var NewsCalendar = (function () {
    var privatevar;

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

    function getWeekStart(date) {
        //Do Stuff
    }

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

然后使用:

NewsCalendar.onLoad();

返回的{} 中的任何内容都是公开的。周围函数内部的任何东西都只能被它内部的任何东西访问。

我建议此设置的原因是因为您似乎不想实例化多个对象,而是将其用作属性/方法库。

【讨论】:

    【解决方案2】:

    你必须创建实例:

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

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2013-03-27
      • 2014-07-16
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多