JS:无上下文函数调用中的“ this”反弹

时间:2018-09-07 23:20:44

标签: javascript function function-binding

此示例中的函数doSomethingElse由于this由于{内无上下文调用而已反弹到windowglobal(如果在Node中),因此无法执行。 {1}}。

是否可以避免在每个函数中不引用app.populateDatabase的情况?

app函数根据逻辑语句执行回调,如果虚拟数据库不存在,则在加载后将其填充,然后loadDatabase执行已提供的回调。

>

我无法将populateDatabase参数重新绑定到onLoaded,因为我不知道它的来源,并且过度绑定/应用/调用抽象会造成混乱。

app

1 个答案:

答案 0 :(得分:3)

只需将Sys.getenv("R_LIBS_USER")替换为this.loadDatabase(this.doSomethingElse); 。这样,您可以创建一个新的箭头函数,但随后会在正确的this.loadDatabase(() => this.doSomethingElse());上下文中调用doSomethingElse

您也可以执行this,但我建议使用箭头功能。这里是.bindbind


通常考虑转移到Promise和异步功能。然后执行以下操作:

this.loadDatabase(this.doSomethingElse.bind(this))

或具有异步功能的更好功能:

this.loadDatabase().then(() => this.doSomethingElse());