我的JavaScript文件中声明了一个非常简单的函数,它应该返回验证是否已经开始:
window.Validator = function(){
this._started = false;
this.started = function(){
return this._started;
};
}
Validator.started();
但是,当我调用Validator.started()
时,即使它实际上是在声明之后,它也会抛出错误:
未捕获的类型错误:Validator.started 不是一个函数
真的让我摸不着头脑,不知道为什么它不起作用。
你应该创建一个验证器的实例
new Validator().started()
>this
是一个上下文。或者简单地说,它是一个位于点左侧的对象。例如:
let v = new Validator();
v.started(); // v will be 'this' in your method
您的代码:
Validator.started();
这意味着,started()
是一种静态的Validator
方法(精确函数Validator()
的方法(。你必须像我上面写的那样编写代码。或:
window.Validator = function() {};
Validator._started = false;
Validator.started = function() {
return this._started;
};
console.log(Validator.started());
这里_started
是一个静态属性,started()
是一个静态的Validator()
方法。
在没有"use strict"的函数中this
指向全局对象,即window
。
因此,您的this.started = function(){...}
是在window
对象上定义的。当然,它仅在调用Validator
后定义。
所以这段代码有效,尽管它可能不是你想使用它的方式。
window.Validator = function(){
this._started = false;
this.started = function(){
return this._started;
};
}
Validator();
started();
console.log(_started);
如果您确实使用"use strict",则会在函数定义区域中undefined
this
。您需要创建一个Validator
的对象,this
调用该方法时该对象。