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

Why can I not access my javascript constructors function from outside

本文关键字:我的 javascript 构造函数 访问 从外部 不能 为什么      更新时间:2023-09-26

通过这种方式创建我的对象:

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;        
}

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

Uncaught TypeError: Cannot call method 'setHasOne' of undefined

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

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

试试这个

function MyViewModel(other) {
var self = this;    
this.other = other; 
this.hasOne = false;
}
MyViewModel.prototype.setHasOne = function(value) {
  this.hasOne = value;
};

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