Skip to main content
 首页 » 编程设计

javascript之为什么 JavaScript 代码需要 "cut the binding"

2024年08月15日7jiqing9006

使用a的原因

(0, foo.fn)(); 

cut the binding :this将不再绑定(bind)到foo,而是绑定(bind)到全局对象。

但是任何 JavaScript 代码(或 Google 的 JS 代码)想要切断绑定(bind)的原因是什么? (这是否是反模式?)

请您参考如下方法:

这种代码通常由转译器(如 Babel)生成,以便将现代 JavaScript(使用最新的规范添加内容)转换为更广泛支持的 JavaScript 版本。

以下是发生此转译模式的示例:

假设我们在转译之前有这个原始代码:

import {myfunc} from "mymodule"; 
myfunc(); 

要制作此 ES5 兼容代码,您可以这样做:

"use strict";     
var mymodule = require("mymodule");     
mymodule.myfunc(); 

但这里我们将使用 mymodule 作为 this 值来执行 myfunc,这在原始代码中不会发生。尽管这可能并不总是一个问题,但最好确保该函数的行为就像在原始版本中一样,即使该函数将使用 this引用——在 myfunc 中使用 this 可能是多么不寻常甚至无用(因为在原始版本中它也会是未定义)。

例如,如果原始代码由于函数中的 this.memberFun() 引用而引发错误,那么它也会在转译版本中引发错误。

这就是使用逗号运算符来消除这种差异:

(0, mymodule.myfunc)(); 

当然,在您自己编写的代码中,您永远不会有这种模式的良好用例,因为您首先不会在 myfunc 中使用 this .