JaveScript函数this指向

38 阅读1分钟
this的绑定规则
代码如下:
     //定义函数
      function foo() {
        console.log('foo函数:', this);
      }
      // 1.方式一:直接调用
      // foo() // 指向window

      // 2.方式二:通过对象调用
      var obj = {name: 'lhm'}
      obj.aaa = foo
      obj.aaa() // 指向obj对象
通过以上代码可知:
  • 1.函数在调用时,Javascript会默认给this绑定一个值
  • 2.this的绑定和定义的位置没有关系
  • 3.this的绑定和调用方式以及调用的位置有关系
  • 4.this是在运行时被绑定的
this的有如下绑定规则:
  • 绑定一:默认绑定
      //定义函数
      function foo() {
        console.log('foo函数:', this);
      }
      foo() // 指向window
  • 绑定二:隐式绑定
      //定义函数
      function foo() {
        console.log('foo函数:', this);
      }

      var obj = {
        bar: foo
      }
      obj.bar() // 指向obj
  • 绑定三:显示绑定
     //定义函数
      function foo() {
        console.log('foo函数:', this);
      }

      var obj = {
        name: 'lhm'
      }

      foo.call(obj) // 指向obj对象    
  • 绑定四:new绑定
      //定义函数
      function foo() {
        this.name = 'lhm'
        console.log('foo函数:', this);
      }

      /*
        new关键字的作用:
        1.创建新的空对象
        2.将this指向这个空对象
        3.执行函数体中的代码
        4.没有显示返回非空对象时,默认返回这个对象
      */
      new foo() // 指向foo对象
绑定优先级:默认绑定的优先级最低,显示绑定优先级高于隐式绑定,new绑定优先级高于隐式绑定,new绑定优先级高于bind
箭头函数的this使用:箭头函数内没有this,会向上一层作用域里查找this的值