- 需求:最近面试,面试官问能不能现场比划一个bind函数。
- 小哥哥有一个很好的习惯就是从来不着急写代码,既然有了需求那咱就来分析分析它 !
- 我们先要想一下Function.prototype.bind 函数可以实现那些功能 。
- 改变this指向
- 这个 bind 还可以传参,fn.bind(obj,...arg)
- 返回了一个函数 ,并且不立即执行,这就是bind,和call,apply的区别吧?
注意:前方高能,小生不才,哪里写的不到位希望各位看官指正。
- 废话不说,有了需求,我们也分析了需求,撸呗。
//有逼格一点,咱也来个原型链编程 Function.prototype.myBind = function (target) { var target = target || window //返回函数需要用到的参数 var outArgs = [].slice.call(arguments, 1) //返回的那个函数 var fn = () => { //返回的这个函数在执行的时候,还有可能在传参,我们把它拿出来 var innArgs = [].slice.call(arguments, 0) //最后执行这个函数呗 return this.apply(target, outArgs.concat(innArgs)) } return fn } var name = "我真的很帅" var obj = { name: "我很帅" } function testBind() { console.log(this.name) } var test = testBind.myBind(obj) console.log(test()) //我很帅,哇塞,this指向改变了,也返回了一个函数,功能实现
- 第一次写文章,有啥不对的地方希望大家指正,以后我会每天写一点小东西,把自己掌握的东西分享出来。
网友评论