无法读取 JavaScript class 中未定义 usding "This" 的属性
Cannot read properties of undefined usding "This" in JavaScript class
我正在使用 Node JS 和 ExpressJS 编写我的网络服务器。我很少使用 JavaScript OOP。我得到一个错误 运行 这个 class:
class myClass {
constructor(path) {
this.path = path;
}
myFunction(){
var fileControllerInstance = new FileController(this.path);
fileControllerInstance.fileExist(function(fileExist) {
if(fileExist){
console.log("file exist");
this.printLine("test");
}
else
return false;
});
}
printSTR(str){
console.log(str);
}
}
new myClass("filePath").myFunction();
module.exports = myClass;
运行 这个 class 我在 printSTR 函数上遇到错误。错误如下:
file exist
TypeError: Cannot read properties of undefined (reading 'printSTR')
没有 this
我得到 ReferenceError: printSTR is not defined
。为了解决我的问题,我需要创建另一个 class 实例并使用它来调用该函数。像这样:
new myClass("filePath").printSTR("test") instead to ``` this.printLine("test"); ```
为什么使用 this
我的代码不起作用?谢谢
在 function(fileExist)
内部,this
具有与外部不同的值。要继承里面的值,必须绑定函数:
fileControllerInstance.fileExist(function(fileExist) {
...
}.bind(this));
您正在回调中调用 this
。您会发现此 post 对解决您的问题很有用。
你也尝试调用 printLine("test")
但你的方法是 printSTR(str)
我正在使用 Node JS 和 ExpressJS 编写我的网络服务器。我很少使用 JavaScript OOP。我得到一个错误 运行 这个 class:
class myClass {
constructor(path) {
this.path = path;
}
myFunction(){
var fileControllerInstance = new FileController(this.path);
fileControllerInstance.fileExist(function(fileExist) {
if(fileExist){
console.log("file exist");
this.printLine("test");
}
else
return false;
});
}
printSTR(str){
console.log(str);
}
}
new myClass("filePath").myFunction();
module.exports = myClass;
运行 这个 class 我在 printSTR 函数上遇到错误。错误如下:
file exist
TypeError: Cannot read properties of undefined (reading 'printSTR')
没有 this
我得到 ReferenceError: printSTR is not defined
。为了解决我的问题,我需要创建另一个 class 实例并使用它来调用该函数。像这样:
new myClass("filePath").printSTR("test") instead to ``` this.printLine("test"); ```
为什么使用 this
我的代码不起作用?谢谢
在 function(fileExist)
内部,this
具有与外部不同的值。要继承里面的值,必须绑定函数:
fileControllerInstance.fileExist(function(fileExist) {
...
}.bind(this));
您正在回调中调用 this
。您会发现此 post 对解决您的问题很有用。
你也尝试调用 printLine("test")
但你的方法是 printSTR(str)