1普通函数的中的this
在普通函数中,进行调用,函数中的this指向的就是windows上下文
例如:
function a(){
console.log(this.x) // 打印10
}
let x = 10
其他形式的函数调用
例如定义在对象中的函数
let demo = {
let a = 10;
let b = 20;
function x(){
console.log(this.a) //打印10
}
}
demo.x()
因为是demo这个对象调用的方法,所以this指向的demo这个对于对象。谁调用他this就指向谁
2在构造函数中的this
在构造函数中的this,这个this是比较的重要也是比较的复杂的
function Person(){
this.a = 1;
this.b = 2;
}
let person = new Person();
new这个操作符是创建一个对象
1 let obj = new Object() 创建了一个新的object对象,也就是在内存中开辟一个对象,并且让一个对象指向这个开辟的空间
2然后让this指向这个新开辟的空间,即this = obj
3把构造函数中的this全部都换成obj,即执行构造函数中的代码,对这个刚开辟的空间进行初始化赋值的一个操作。或者说是(复制备份)
但是,有一个要注意的点。就是返回对象的时候,this指向的是这个对象
function A(){
this.x = 1;
return {}
}
let a = new A()
console.log(a.x) //undefine
只要返回的不是基本类型,this的指向就会改变,指向这个返回的对象
可以改变this指向的方法有apply(),bind(),call()方法
箭头函数的this是不会改变,一直指向的都是这个函数内的上下文。就算是apply,call方法都不能改变它