从同一个类的另一个函数调用一个类的函数

时间:2019-08-01 13:42:36

标签: javascript object ecmascript-6 es6-class

class Frame {
  constructor() {
    this.init();
  }

  init(){
    setTimeout(function(){this.secondFunction()}, 2000); // DOES NOT WORK
  }

  secondFunction(){
  }
 }

我试图从同一个类的另一个函数调用一个类的函数。当我直接使用“ this.secondFunction()”调用它时,它可以正常工作。但是,当我将其移动到setTimeout或JQuery函数的inode时,它不起作用并抛出错误“ this.secondFunction不是函数”。我认为这是因为从setTimeout调用时,“ this”更改为计时器对象。在这种情况下调用该函数的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

{ "Id": "1369130", "Venueid": "0005", "Userid": "1320625", "Menuid": "null", "Created": "2019-07-29T08:18:35.000+0000", "items": [ { "Id": "4255354", "Total": "3.10", "Price": "2.80", "Qty": "1", "Orderid": "1369130", "Menuitemid": "1447268", "Externalid": "", "Name": "Breakfast Roll Deal", "modifiers": [ { "Price": "0.00", "Qty": "1", "Id": "0000001", "Orderitemid": "4255354", "Externalid": "1000716", "Name": "Bacon and Sausage Corn Topped Roll" }, { "Price": "0.30", "Qty": "1", "Id": "00000002", "Orderitemid": "4255354", "Externalid": "E1001587", "Name": "Extra Sausage" }, { "Price": "0.00", "Qty": "1", "Id": "00000003", "Orderitemid": "4255354", "Externalid": "1000774", "Name": "Latte" }, { "Price": "0.00", "Qty": "1", "Id": "00000004", "Orderitemid": "4255354", "Externalid": "E", "Name": "Spread" } ] } ] } 函数中的this不是您想要的。使用箭头功能:

setTimeout

问题是setTimeout(() => { this.secondFunction(); }, 2000); 中的函数正在将setTimeout引用从新实例更改为this,这不是您想要的。箭头函数继承了其setTimeout绑定,因此可以完美工作。

等效于ES5的是在回调之外使用this来更改绑定。

bind