首页 > 其他 > 详细

this指向几个要点

时间:2020-06-03 09:29:22      阅读:38      评论:0      收藏:0      [点我收藏+]

1 决定this指向的是函数执行的时候,而不是函数声明的时候。

2 谁调用的函数,this就指向谁,class和构造函数也适用,this指向实例。

3 箭头函数不改变this指向,this是上级函数作用域的this。

4 fn1.call({x:1}),用call函数调用,this就是传入{x:1}。

5 const fn2 = fn1.bind({x:1},a,b,c); fn2(); bind函数和call作用一样,区别是要用一个变量接收,再调用。

6 fn1.apply({x:1},[]) apply 接收2个参数,第一个参数是绑定的this的值,第二个参数是要传入的参数数组。

 

手动实现一个bind函数:

    //手写bind函数
    //在Function的原型上增加方法newBind,这样其他函数都可以通过原型链查找的方式找到newBind方法
    Function.prototype.newBind = function(){
      //newBind方法要接收很多参数,且数量是不固定的,我们要把参数处理一下,将参数拆解成数组
      const args = Array.prototype.slice.call(arguments);//arguments是函数中所有的数组
      //获取参数传入的this(第一个参数),shift截取的数组的第一位,args剩余其他元素
      const _this = args.shift();
      //获取调用的函数
      const self = this;
      //返回一个函数
      return function(){
        return self.apply(_this,args);
      }
    }

 

 

 

    // 注:不了解arguments的同学看这里,arguments 是一个特殊对象,代表函数的所有参数。
    function fn1(a,b,c){
      console.log(arguments)
      console.log(Object.prototype.toString.call(arguments) )
    }
    fn1(1,2,3)

  打印结果如下

技术分享图片

 

this指向几个要点

原文:https://www.cnblogs.com/panda-programmer/p/13034768.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!