为什么我不能从外部访问我的javascript构造函数

时间:2013-07-04 15:33:18

标签: javascript

这样我创建了我的对象:

var myViewModel = new MyViewModel("other");

为什么我不能在viewmodel之外调用myViewModel.setHasOne(value)

我总是得到这个错误:

  

未捕获的TypeError:无法调用未定义的方法'setHasOne'

我知道我可以直接设置属性,但我想知道如何使用方法来完成它?

这是我的功能:

function MyViewModel(other) {

    var self = this;    
    self.other = other; 
    self.hasOne = false;

    this.setHasOne= function (value) {
        self.hasOne = value;
    };          

    return this;        
}

2 个答案:

答案 0 :(得分:0)

试试这个

function MyViewModel(other) {

var self = this;    
this.other = other; 
this.hasOne = false;

}
MyViewModel.prototype.setHasOne = function(value) {
  this.hasOne = value;
};

注意:您不需要构造函数中的return语句,因为您已有权访问this

答案 1 :(得分:0)

您的代码没有任何问题,它应该可以工作,也许您在某处有拼写错误。但基于错误,问题不在于定义方法,而在于您的类的实例,错误说:

Uncaught TypeError: Cannot call method 'setHasOne' of undefined

这意味着无论出于何种原因,您的变量“myViewModel”未定义,因此无法为未定义的值找到“setHasOne”。

关于您的代码,在构造函数中定义名为“Privileged Methods”的方法。这种方法的唯一好处是它们可以访问在构造函数中定义的私有变量。如果您不使用此功能,最好将您的方法定义为“公共方法”。原因是,公共方法为类的每个实例使用共享内存空间。