0

这样我创建了我的对象:

var myViewModel = new MyViewModel("other");

为什么我不能myViewModel.setHasOne(value)从视图模型外部调用?

我总是得到这个错误:

未捕获的类型错误:无法调用未定义的方法“setHasOne”

我知道我可以直接设置属性,但我想知道如何使用方法来做到这一点?

这是我的功能:

function MyViewModel(other) {

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

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

    return this;        
}
4

2 回答 2

0

尝试这个

function MyViewModel(other) {

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

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

注意:您不需要return构造函数中的语句,因为您已经可以访问this.

于 2013-07-04T15:59:41.790 回答
0

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

Uncaught TypeError: Cannot call method 'setHasOne' of undefined

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

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

于 2013-07-04T16:55:02.573 回答