当我从回调中调用es6类的方法时,我不能再将this
称为我的对象:
class store{
constructor(){
this.value = 10;
};
printValue(self){
console.log(this);
console.log(self);//the value that I want print
};
};
class undefinedClass{
constructor(store){
this.store = store;
};
storeQuery(){
let ff = this.store.printValue;
setTimeout(ff, 300, this.store);
};
};
let i = new store();
let b = new undefinedClass(i);
b.storeQuery();
当我调用b.storeQuery()时,我想要打印的值是第二个。 有没有更优雅的方式呢?
答案 0 :(得分:0)
当您在JavaScript中使用对象的函数引用时,它将失去其设置为该对象的ThisBinding。
您可以使用Function.prototype.bind()
将ThisBinding添加到任何内容。
在这种情况下,您可以使用类似ff.bind(this.store)
的内容。
答案 1 :(得分:0)
正如@alex所说,.bind
文档为here
class store{
constructor(){
this.value = 10;
};
printValue(){
console.log(this.value);//the value that I want print
};
};
class undefinedClass{
constructor(store){
this.store = store;
};
storeQuery(){
setTimeout(this.store.printValue.bind(this.store), 300);
};
};
let i = new store();
let b = new undefinedClass(i);
b.storeQuery();