• js 函数的this指向


    一、

    1、es5:

      函数里的this指向分两种,一种正常函数调用指向被调用的对象,比如:

    1    test=()=>{
    2         console.log(this)
    3     };
    4     test();//是当前window调用,所以this指向window。

      在事件调用里。this指向为当前调用时间的dom元素。

    1     //es5 this指向 调用时间的dom元素
    2     btn.onclick=function () {
    3         console.log(this)
    4     }

    2、es6:

    es6 如上情况this指向为window。

    1     let btn=document.querySelector('.btn');
    2     //es6 this指向是window
    3     btn.addEventListener('click',(e)=>{
    4         console.log(this);
    5     });

    二、

    es5:

    如何改变this指向呢?可以使用call方法和apply方法以及bind方法,这2个方法效果一致,只是传参类型不一样。

    1  
    2      function  fn1() {
    3          console.log(arguments);
    4          console.log(this)
    5      }
    6     fn1.call(document.body,1,2,3,4);//第一个参数为作用域 第二个是传递的参数值。多个以逗号隔开。
    7     fn1.apply(document.body,[1,2,3,4]);//第一个参数为作用域,第二个参数为数组参数。
    8     var  newFn=fn1.bind(document.body,1,2);// 也是可以修改this指向,但是这个返回值是新的函数的副本,需要调用才能执行函数
    9     newFn();

    es6:无论是call方法还是apply方法 bind方法都无法改变this指向。

    1   fn=(...x)=>{//扩张运算符 可以将参数传的数组 转变成单个参数
    2          console.log(x);//rest 语法 返回是一个数组
    3          console.log(this)
    4      };
    5      fn.call(document.body,1,2);//第一个参数为作用域 第二个是传递的参数值。多个以逗号隔开。

  • 相关阅读:
    将本地sql文件导入到mysql中
    eclipse注释乱码问题
    导入import com.sun.image.codec.jpeg.JPEGCodec出错
    cmd启动和停止tomcat
    Tomcat修改端口
    ==和equals
    多态
    关键字——this,super,static,final
    方法重载、方法重写、四种权限修饰、JavaBean、代码块
    异常
  • 原文地址:https://www.cnblogs.com/evilliu/p/10816720.html
Copyright © 2020-2023  润新知