this指向谁?
招数千万,万里归一:
宝典只有一句:取决于 当前this所在函数的调用
分析: 就两点
怎么看?
不用管this外面包了几层函数,或几层对象,就看当前this所在的函数
,看这个函数
是怎么被调用的,注意调用
,没有调用
就不用谈this指向。
举例?
- 默认在全局下,下面函数中的this指向哪里?输出是?
function foo(){
console.log(this)
}
。。。this指向foo?this指向window?不,this没有指向,函数没有调用啊
function foo(){
console.log(this)
}
foo(); // this 指向 window : 函数调用,this 指向全局(window)
foo.call(123); // this 指向 123 : call 改变this指向,this指向call()方法的第一个参数。
const obj = {
foo: function (){
console.log(this)
}
}
obj.foo() // this 指向 obj : 1.this在foo方法中,2.foo方法是通过obj调用的,this指向obj
const fn = obj.foo
fn() // this 指向 全局 : 1.this在fn方法中,2.fn方法是函数形式调用的,this指向全局
const obj = {
foo: function (){
function bar(){
console.log(this)
}
bar()
}
}
obj.foo() // this 指向 全局 : 1.this在bar函数中,2.bar是直接函数形式调用的(看题第6行),this指向全局
总结
-
怎么看?
- 沿作用域向上找最近的一个
function
(不是箭头函数), 看这个function
怎么调用。
- this指向取决于
function
如何调用,而不是定义。
- 找不到所属的
function
, 就是全局对象的
-
function 调用 一般分为以下几种情况:
- 作为函数调用,如
foo()
:
this 指向 全局对象(GlobalThis)。注意:严格模式(static)下,全局函数 foo() 调用时,this是undefined。
- 作为方法调用,如
foo.bar()
/ foo['bar']()
/ foo.bar.baz()
/ foo[0].bar()
:
this 指向 调用这个方法的对象(距离最近的一个)
- 作为构造函数调用,如
new Foo()
:
this 指向 一个新对象Foo {}
- 特殊调用,即
foo.call()
/ foo.apply()
/ foo.bind()
:
this 指向 参数指定成员
补充: 顺便解释一下,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)