JS中如何正确判断this的指向
-
在全局中定义的函数,对于全局中的直接调用,其this指向始终是window对象。
例如定义函数时:
function foo(){
console.log(this.a)
}
调用时:
var a=1;
foo(); //1
在这种情况下,调用函数时,a的值就是全局变量中的a
-
如果是在对象中定义了函数,则利用对象调用函数,this的指向是调用函数的那个对象。
例如在对象中定义函数:
function foo() {
console.log(this.a)
}
obj={
a: 2,
foo: foo
}
obj.foo(); //2
这种情况下,哪个对象调用了函数,this就指向该对象。
-
如果函数定义是直接用new的方式定义的,则this永远指向定义时那个变量。
例如函数定义时:
const b = new foo()
这种情况下,this的指向将会始终指向b。
-
特别注意箭头函数本身是没有this的,由谁第一包裹了箭头函数,箭头函数this就指向包裹函数的this。
function a() {
return () => {
console.log(this)
}
}此时this的指向为a。
-
也可以利用bind改变上下文!此时this取决于bind的第一个参数。注意!如果进行多次bind,this永远由第一次bind所决定。
在这几条规则中,new的优先级是最高的,接下来是bind,再者是对象的调用方式,最后是直接调用。注意,如果箭头函数的this确定了,则将不再发生改变!
以上为个人学习总结,如果有不对的地方,还请大家多多指出来。