JS bind方法是如何实现的?有研究过源码的吗?

发布于 2022-09-12 23:47:01 字数 436 浏览 26 评论 0

最近整理了一篇手撕bind方法的文章
一个疑问?
我们模拟实现bind方法,终归是通过apply实现的。而它源码是如何实现的,对于我来说就像一个黑盒。也就是说:不用apply,它是如何实现?


已经得到了我想要的答案
虽然..其他答友提到JS源代码的实现可能是C/C++
但是,感谢jsdeferred的解答,使得我能够不借助apply手撕bind

完整版手撕bind代码及逻辑实现过程已经整理到我的个人博客:Crushdada's Blog 以及思否文章

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空城旧梦 2022-09-19 23:47:01

回想一下你问的这个问题

const bind = (context, func) => {
  return (...args) => {
    context.__INTERNAL_SECRETS = func
    try {
      return context.__INTERNAL_SECRETS(...args)
    } finally {
      delete context.__INTERNAL_SECRETS
    }
  }
}

bind({ a: 1 }, function () {
  console.log(this.a)
})()
合约呢 2022-09-19 23:47:01

ECMA 只规定表现,具体如何实现取决于各家浏览器引擎。

以 V8 为例,相关源码主要散落在 src/runtime.ccsrc/profile-generator.ccsrc/factory.cc 等几个文件里,感兴趣的话可以自行阅读相关的 C/C++ 代码。

P.S. 所有原生方法对你来说都是黑盒的,你要关心为啥只关心 apply

风月客 2022-09-19 23:47:01

直接看 w3c 的文档够直接了吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文