这个/自我在es6班

时间:2016-04-19 15:25:12

标签: javascript ecmascript-6

当我从回调中调用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()时,我想要打印的值是第二个。 有没有更优雅的方式呢?

2 个答案:

答案 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();