# javascript中this指向

重要概念: this 是在运行时进行绑定的,并不是在编写时绑定

# 几种对this理解的误区

  • this 指向自己

举一个很简单的例子

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

这时我们发现,打印出来的this 是window(原因后面会讲) 但这个例子足以证明this不是指向自己

  • this指向函数的作用域

这个例子不太好举,因为作用域是一种概念,不是一个函数也不是一段代码,他存在与js引擎内部。但是可以肯定的是this并不指向函数的作用域

# this 指向的几种情况

# 普通的this,谁调用指向谁

比如上面的例子:

function dome(){
    console.log(this)
}
dome(); // window.dome()

可以看作是window调用了dome,只不过window我们省略了

TIP

在严格模式下 'use strict'
这时的this 指向 undefined

# 在构造函数中,this指向其构造函数

function dome(){
    console.log(this); //dome
}
const D = new dome(); 

# bind call 可以改变this指向

function dome (){
    console.log(this.name);
}
const name = '码不停息'
dome();  //这时打印出来的是 码不停息 因为 this 指向的是window

const obj = {
    name:'lyh'
}

dome.call(obj)  //这时打印出来的是 lyh this指向了 obj 

# 在对象的方法里调用时,指向的是这个对象

const dome = {
    this.name = '码不停息',
    say:function(){
        console.log(this.name)
    }
}
dome.say() //  打印出来的是 码不停息