新的es6类允许您在方法中使用自引用变量this
但是,如果类方法具有子函数或回调,则该函数/回调不再能够访问自引用变量this
class ClassName {
constructor(dir){
this.dir = dir;
fs.access(this.dir, fs.F_OK | fs.W_OK, this.canReadDir);//nodejs fs.access with callback
}
canReadDir(err){
this.dir;// NO ACCESS to class reference of this
}
//OR
aMethod(){
function aFunc(){
this.dir;// NO ACCESS to class reference of this
}
}
}
有没有解决方案?
答案 0 :(得分:25)
您有以下选择:
1)使用箭头功能:
class ClassName {
// ...
aMethod(){
let aFun = () => {
this.dir;// ACCESS to class reference of this
}
}
}
2)或bind()
方法:
class ClassName {
// ...
aMethod(){
var aFun = function() {
this.dir;// ACCESS to class reference of this
}.bind(this);
}
}
3)将this
存储在专用变量中:
class ClassName {
// ...
aMethod(){
var self = this;
function aFun() {
self.dir;// ACCESS to class reference of this
}
}
}
This article介绍了JavaScript中this
和箭头函数的必要详细信息。
答案 1 :(得分:0)
在aMethod()中引用dir,然后在aFunc中使用它,如
aMethod() {
var tempDir = this.dir;
aFunc() {
console.log(tempDir);
}
}