this
函数调用的几个场景:
function foo() {
console.log(this.a)
}
var a = 1
foo()
const obj = {
a: 2,
foo: foo
}
obj.foo()
const c = new foo()
对于直接调用foo(),不管foo()函数放在什么地方,this一定是windows。
对于obj.foo(),谁调用foo(),谁就是this。
对于new方式来说,新建的this被永远的绑在c上,不会被任何方式改变。
!注:es6的箭头函数没有this,super,arguments等等,这些都要依赖包含箭头函数最近的函数。另外,箭头函数使用bind这类函数是无效的。
当出现以上情况一起出现的时候,就需要根据优先级来判断this的指向了,首先new的优先级最高,其次是bind函数,然后是obj.foo()调用,最后才是直接调用foo()

浙公网安备 33010602011771号