JavaScript绑定通话

时间:2019-04-24 19:57:21

标签: javascript

我遇到了以下代码。试图了解它到底在做什么。似乎脚本文件被故意混淆了。

var d=Function.prototype.bind,
e=Function.prototype.call,
f=e.bind(d,e),

哪种类型的翻译为

var f = Function.prototype.call.bind(Function.prototype.bind, Function.prototype.call)

查看MDN文档,bind接受传递给函数的其他参数。这是否意味着每当使用变量f时,它将以Function.prototype.call作为第一个参数?将“ this”设置为Function.prototype.bind有什么帮助?

1 个答案:

答案 0 :(得分:3)

使用Function.prototype.call的正常方式如下:

functionName.call(thisvalue, arg1, arg2, arg3)

调用call方法时,它将获得functionName命名的函数作为其this上下文(就像其他任何方法调用一样),并且调用它。

在您的代码中,我们正在使用bind()创建一个新函数,该函数的this上下文和第一个参数绑定到特定值。该函数为Function.prototype.call,其this上下文为Function.prototype.bind,其第一个参数为Function.prototype.call。这样做

x = f(something)

等同于呼叫

x = Function.prototype.bind.call(Function.prototype.call, something)

这等效于:

x = Function.prototype.call.bind(something)

因此x也是一个函数-它是call方法,其this上下文绑定到“某物”。所以打电话

x(1, 2, 3)

等同于

something.call(1, 2, 3)

我当然希望我做对了,它确实令人费解,就像Adventure迷宫般的曲折小段落一样,都不同。