美文网首页
javaScript之 bind

javaScript之 bind

作者: Nothinglefttosa | 来源:发表于2018-10-22 22:38 被阅读0次
  1. 需求:最近面试,面试官问能不能现场比划一个bind函数。
    • 小哥哥有一个很好的习惯就是从来不着急写代码,既然有了需求那咱就来分析分析它 !
  2. 我们先要想一下Function.prototype.bind 函数可以实现那些功能 。
    • 改变this指向
    • 这个 bind 还可以传参,fn.bind(obj,...arg)
    • 返回了一个函数 ,并且不立即执行,这就是bind,和call,apply的区别吧?
      注意:前方高能,小生不才,哪里写的不到位希望各位看官指正。
  3. 废话不说,有了需求,我们也分析了需求,撸呗。
       
       //有逼格一点,咱也来个原型链编程
        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指向改变了,也返回了一个函数,功能实现
    
    
    1. 第一次写文章,有啥不对的地方希望大家指正,以后我会每天写一点小东西,把自己掌握的东西分享出来。

相关文章

网友评论

      本文标题:javaScript之 bind

      本文链接:https://www.haomeiwen.com/subject/ocbnzftx.html