我遇到了以下代码。试图了解它到底在做什么。似乎脚本文件被故意混淆了。
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有什么帮助?
答案 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迷宫般的曲折小段落一样,都不同。