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同时将调用时传递的序列和预置序列进行合并
}
}

最新文章

  1. 持续集成基础-Jenkins(一)
  2. PAT乙级 1001. 害死人不偿命的(3n+1)猜想 (15)
  3. .ascx.g.cs文件不能生成 The name ‘InitializeControl’ does not exist in the current context - Visual Web part Sharepoint
  4. linux bash下 快捷键
  5. session多服务器共享的方案
  6. 0基础手把手教你搭建webpack运行打包项目(未完待续)
  7. jupyter notebook下python2和python3共存(Ubuntu)
  8. java并发包分析之———Deque和LinkedBlockingDeque
  9. javascript闭包学习
  10. Github 上怎样把新 commits 使用在自己的 fork 上
  11. 100-days: ten
  12. json与xml数据输出类
  13. Win10系列:JavaScript综合实例2
  14. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
  15. python写xml及几个问题
  16. 关于安卓苹果手机安装证书抓https的关键步骤
  17. 20180201之Burp Suite Professional V1.7.31 相关英文翻译
  18. trampoline蹦床函数解决递归调用栈问题
  19. mysql初次登陆跳过密码并初始化密码
  20. linux下,手动切换jdk

热门文章

  1. DataTable 去重合并
  2. Flash Builder 4.7 完美破解
  3. JS与jQuery中html-与-text方法的区别
  4. eclipse keys
  5. Linux内存管理之mmap详解 【转】
  6. FileReader&FileWriter
  7. Oracle sql例子
  8. 修改SVN路径
  9. (1)oracle安装、卸载、启动、关闭、登陆以及同时遇到的问题
  10. 八. 输入输出(IO)操作2.面向字符的输入流