如何在分配给变量时将方法绑定到原始上下文

reo*_*eoh 5 javascript this ecmascript-6

由于函数在未作为对象属性[1]访问时被赋予"全局上下文",因此以下内容具有相同的特征:

const foo = ({bar}) => {
  bar(); // this === window
}
Run Code Online (Sandbox Code Playgroud)

因为它只是语法糖:

const foo = (x) => {
  var bar = x.bar;
  bar();
}
Run Code Online (Sandbox Code Playgroud)

因为我现在必须重新绑定或放弃糖,这对我来说似乎有点违反直觉.

有没有办法改变这种行为,以便不改变上下文(除了通过.apply/call/bind显式设置它)?是否有任何关于标准的计划/建议?

[1] Javascript在分配给其他变量时丢失了上下文

Hug*_*lva 2

好吧,你回答了你自己的问题。如果您将对象作为参数,那么作为属性传递的任何函数都将已经是一个方法,从而失去上下文,无论语法是什么样的。

您可以做的是从参数的方法内部调用绑定函数:

const argumentContainingBar = {
  bar: () => { originallyBoundFunction() }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以foo(argumentContainingBar)在不丢失上下文的情况下进行操作。