绑定在Javascript中意味着什么?

时间:2018-04-05 00:03:24

标签: javascript binding

我正在阅读这本名为Eloquent JavaScript的好书,但我对使用“#34; binding"这个词感到困惑。在this example:

  

可以在对象表达式中包含符号属性   通过在属性名称周围使用方括号来进行类。这导致了   要评估的属性名称,很像方括号   属性访问表示法,它允许我们引用绑定   持有这个符号。

let stringObject = {
  [toStringSymbol]() { return "a jute rope"; }
};
console.log(stringObject[toStringSymbol]());
// → a jute rope

据我了解(到目前为止,在我的JS旅途中),"绑定"涉及指定函数操作的this或对象上下文。 See here.。绑定可能与上下文有关。这就是为什么我们有.bind()

但是在这个例子中我们绑定了其他东西(一个键是符号的方法)。 binding只是意味着将属性(基元或方法)附加到对象吗?

1 个答案:

答案 0 :(得分:3)

绑定是指将属性(基元或方法)附加到对象吗?

您之前的段落提供了更好的解释:

“binding”涉及指定这个或对象上下文

排序

JavaScript跟踪的所有内容都受到约束。实际上,undefined的定义意味着JavaScript无法找到绑定标识符。

<强>答案

在JavaScript中绑定某些内容意味着在特定的Environment Record中记录该标识符。每个Environment Record都与特定的Execution Context相关 - 并将标识符(变量或函数名称)绑定到该执行上下文的this关键字。

<强>参考

https://www.ecma-international.org/ecma-262/5.1/#sec-10.5

不那么正式

将环境记录视为一堆东西。这些不是对象,函数或变量或我们在JavaScript中代码的任何东西,这些桶包含所有这些东西。 JavaScript应用程序中有许多存储桶。每个铲斗独立于其他铲斗运行。该独立性在JavaScript中表示为上下文(或执行上下文)。但有时我们想要使用不同桶内的一个桶中的东西。这就是绑定的来源。我们可以将来自一个存储桶的东西绑定到另一个存储桶的上下文中以便在那里执行。 (所有这一切的副作用是this关键字反映了桶借用的东西。)