js原生方式实现bind方法
2024-08-27 23:00:19
1、思路
(1)因为bind方法不会立即执行函数,需要返回一个待执行的函数(这里用到闭包,可以返回一个函数)return function(){}
(2)作用域绑定,这里可以使用apply或者call方法来实现
xx.call(yy)/xx.apply(yy)
(3)参数传递,由于参数的不确定性,需要用apply传递数组(
实例更明了
)xx.apply(yy,[...Array...]),如果用call就不太方便了,因为call后面的参数需要一个个列出来。
2、实现
Function.prototype.bind = function(newThis) {
var aArgs = Array.prototype.slice.call(arguments, 1) //拿到除了newThis之外的预置参数序列
var that = this
return function() {
return that.apply(newThis, aArgs.concat(Array.prototype.slice.call(arguments)))
//绑定this同时将调用时传递的序列和预置序列进行合并
}
}
最新文章
- 持续集成基础-Jenkins(一)
- PAT乙级 1001. 害死人不偿命的(3n+1)猜想 (15)
- .ascx.g.cs文件不能生成 The name ‘InitializeControl’ does not exist in the current context - Visual Web part Sharepoint
- linux bash下 快捷键
- session多服务器共享的方案
- 0基础手把手教你搭建webpack运行打包项目(未完待续)
- jupyter notebook下python2和python3共存(Ubuntu)
- java并发包分析之———Deque和LinkedBlockingDeque
- javascript闭包学习
- Github 上怎样把新 commits 使用在自己的 fork 上
- 100-days: ten
- json与xml数据输出类
- Win10系列:JavaScript综合实例2
- Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
- python写xml及几个问题
- 关于安卓苹果手机安装证书抓https的关键步骤
- 20180201之Burp Suite Professional V1.7.31 相关英文翻译
- trampoline蹦床函数解决递归调用栈问题
- mysql初次登陆跳过密码并初始化密码
- linux下,手动切换jdk