this指向的问题
注意:this的指向在函数定义的时候是无法确定的,必须在函数执行的时候才能确定,this 指向 的是调用它的对象
判断方法
- window是全局的对象,如果有一个全局函数,这个函数中有this,当这个函数执行的时候,this指向全局 对象 window,抓住对象这一点
- 一个函数中有this,但是this没有被上级函数调用,那么this指向window。
- 一个函数中有this,this被它的上级函数调用,那么this就指向它的上级函数。
- 如果一个函数中有this,这个函数中有多个对象,尽管这个对象是被最外层的函数调用,this也是指向它的上一级函数。
- 函数预编译的过程中,this指向window
- 闭包中指向window
- call/apply可以改变函数运行时的this指向
- obj.fun(); fun()里面的this指向obj
下面我们来看一段很综合的代码,下面的代码都是连着的,是一个整体
var name ="222";
var a=
{
name:"111",
say:function()
{
console.log(this.name);
}
var fun =a.say();
虽然say是a引用的,但是在将say赋值给fun的时并没有执行,所以最终指向的是window,所以打印this.name是222
fun()
这里才是函数执行
a.say()
这里this被调用所以指向上级函数a,所以打印this.name是111
var b={
name:"333",
say:function(fun)
{
fun();
}
}
b.say(a.say);
b.say执行的时候a.say进行定义并没有执行,所以虽然say是a引用的,但是没有被调用,this最终指向window,打印的结果是222
b.say=a.say;
这里是不是相当于这样:
var b={
name:“333”,
say:function()
{
function()
{
console.log(this.name);
}
}
}
b.say();
this始终指向它的上一级b,所以打印333