看了这片文章相信你绝对对This指向有一个全新的认识,文章虽短,但全是精华
- 沿着作用域向上找最近一个function(不是箭头函数),看这个function是如何执行的
- this指向取决于所属function是如何调用的,而不是定义
- function调用一般分为以下几种情况
- 作为函数去调用,即:foo() 指全局对象(globalThis),注意严格模式下的问题,严格模式下undefined
- 作为方法去调用,即:obj.foo() 指向最终调用这个方法的对象
- 作为构造函数去调用,即:new Foo() 指向一个新的对象Foo {}
- 特殊调用,即:foo.call()、foo.apply()、foo.bind() 指向参数指定成员
- 找不到所属function,就是全局对象
实例:
// 1、作为函数去调用
function foo () {
console.log(this)
}
foo() // this指向全局对象(globalThis)
// 2、作为方法去调用
const obj = {
foo: function() {
console.log(this)
}
}
obj.foo() // this指向obj这个对象
// 3、作为构造函数去调用
function Person() {
console.log(this)
}
new Person() // 指向Person {}这个新的对象
// 4、特殊调用
const obj = {
name: 'jack'
}
function foo() {
console.log(this)
}
foo.call(obj) // this指向obj这个对象
foo.call(1) // this指向1
-----------------------------------------------------
foo.apply(obj) // this指向obj这个对象
foo.apply(1) // this指向1
-----------------------------------------------------
foo.bind(obj)() // this指向obj这个对象
foo.bind(1)() // this指向1