首页 > 解决方案 > 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 有何帮助?

标签: javascript

解决方案


使用的正常方式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函数也是如此——它callthis上下文绑定到`something. 所以打电话

x(1, 2, 3)

相当于

something.call(1, 2, 3)

我当然希望我做对了,它真的很复杂,就像冒险迷宫中曲折的小通道,完全不同。


推荐阅读