美文网首页
彻底弄懂this指针指向

彻底弄懂this指针指向

作者: z_love | 来源:发表于2019-08-07 09:58 被阅读0次

普通函数的this指向

  • 全局this
console.log(this) // window

function globalFunc() {
  console.log(this) // window
}

globalFunc() // 相当于window.globalFunc(), 全局方法就是window在调用,所以指向window

在浏览器中指向window

  • 函数(this指向调用者)
var obj = {
  clg: function() {
    console.log(this)
  }
}

obj.clg() // this = obj

对象调用方法指向该对象

var a = 5
var obj = {
  a: 10,
  clg: function() {
    console.log(this.a)
  }
}

var func = obj.clg
func() // a = 5, this === window

因为函数其实是地址,obj.clg赋值给func,其实是将函数地址赋值给func,函数只有一份,obj.clg()是通过对象寻址到函数的,是对象调用的,所以this指向obj,而func()是window.func寻址到的函数,是window调用的,所以指向window,也就是谁调用,this指向谁

var a = 5
var obj = {
  a: 10,
  clg: function() {
    function func() {
      console.log(this)
    }
    func() // 指向window,没有对象调用就相当于window调用的
  }
}

obj.clg()
var a = 5
var obj = {
  a: 10,
  clg: function() {
    setTimeout(function() {
      console.log(this)
    }, 500)
  }
}

obj.clg()

func没有被对象调用,所以是window调用的,this指向window

  • 箭头函数(箭头函数没有this指针,根据词法作用域找最近的this,只有函数有this)
    词法作用域是指找到作用域链中最近的一个变量,this和argument是函数才有的局部变量
var obj = {
  arrow: {
    func: () => {
      console.log(this) // window
    }
  }
}

obj.arrow.func()

箭头函数没有this指针,会根据词法作用域进行查找,对象也没有this指针,所以func对象和arrow对象都没有this局部变量,所有this找到了window上

var obj = {
  arrow: function() {
   setTimeout(() => {
     console.log(this) // obj
   }, 500)
  }
}

obj.arrow()

箭头函数没有this,通过词法作用域,找到arrow为函数,有this,则其this为arrow的this,arrow是obj调用的,所以this指向obj,所以箭头函数的this指向obj

  • call/apply/bind
var a = 1
var obj1 = {
  a: 2
}

var obj2 = {
  a: 3
}

function clga() {
  console.log(this.a)
}

clga() // 1
clga.call(obj1) // 2
clga.apply(obj1) // 2
var f = clga.bind(obj2)
f() // 3

均可以修改this对象,注意apply和call都会执行函数,bind只是绑定this,但是bind之后,不论赋值给谁,调用的时候,this都会指向绑定的对象,所以此时f()中的this不是指向window而是指向obj2

注意: 当需要多个this的时候,可以使用that或者_this等保存对应的this,然后通过词法作用域,内部都可以拿到这个this

相关文章

  • 彻底弄懂this指针指向

    普通函数的this指向 全局this 在浏览器中指向window 函数(this指向调用者) 对象调用方法指向该对...

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • 指针运算

    指针的类型与指针指向的类型明显不相等 指针的类型表示指针自身的类型; 指针指向类型表示指针指向数据(内存)的类型。...

  • C语言(五)指针

    一、指针的概念 二、*号的含义 三、指针指向数组 四、指针指向的指针 一、指针的概念:pointer,指向一块地方...

  • 指针

    一. 指针指向的是对象的地址//函数指针:指针指向函数//指针函数:函数返回指针 二.

  • this 指针指向

    this指针通常都是和函数一起使用 在函数外this指针指向window(一般不会用,只有在局部变量覆盖全局变量时...

  • iOS开发中方法查找流程图

    实例对象的isa指针指向类对象,类对象的isa指针指向元类,元类的isa指针指向根元类,根元类的isa指针指向自己...

  • 回调函数

    函数指针 (1) 函数指针是指指向函数而非指向对象的指针。像其它指针一样,函数指针也指向某个特定的函数类型,函数类...

  • C++ 指向类的指针

    原文地址:C++ 指向类的指针 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成...

  • [C++之旅] 16 对象指针/对象成员指针/this指针

    [C++之旅] 16 对象指针/对象成员指针/this指针 一、对象指针 对象指针指向堆中地址 对象指针指向栈中地...

网友评论

      本文标题:彻底弄懂this指针指向

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