class Frame {
constructor() {
this.init();
}
init(){
setTimeout(function(){this.secondFunction()}, 2000); // DOES NOT WORK
}
secondFunction(){
}
}
我试图从同一个类的另一个函数调用一个类的函数。当我直接使用“ this.secondFunction()”调用它时,它可以正常工作。但是,当我将其移动到setTimeout或JQuery函数的inode时,它不起作用并抛出错误“ this.secondFunction不是函数”。我认为这是因为从setTimeout调用时,“ this”更改为计时器对象。在这种情况下调用该函数的正确方法是什么?
答案 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