javascript - 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 有何帮助?
解决方案
使用的正常方式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
上下文绑定到`something. 所以打电话
x(1, 2, 3)
相当于
something.call(1, 2, 3)
我当然希望我做对了,它真的很复杂,就像冒险迷宫中曲折的小通道,完全不同。
推荐阅读
- python - Hashmap 删除和更新 python
- html - 如何每 x 秒更改一次背景图像
- reactjs - 测试 redux 操作
- elixir - 将第二个孩子添加到主管会引发错误
- puppeteer - 如何在截屏之前使用无头 chrome / pupeteer 翻译页面语言?
- reactjs - useEffect 挂钩未正确设置状态对象
- internationalization - Wagtail 2.11.2 国际化,翻译的页面不会自动创建也无法访问
- c - 如何在 Kotlin/Native 中创建原始数据类型的 CPointer?
- reactjs - Usestate 在文本标签中不起作用并给我相同的值 React native hooks
- python - 配置 python sqlite3 模块以使用不同的(较新版本)sqlite 系统库(升级 sqlite)