我正在阅读这本名为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
只是意味着将属性(基元或方法)附加到对象吗?
答案 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
关键字反映了桶借用的东西。)