this详细解析和如何确定this的值

1.1. this是什么?

 this详细解析和如何确定this的值

 Ø  jsthis是一个对象。

this详细解析和如何确定this的值

Ø 它的值是不确定的,只有在代码运行的过程中才能确定this的值

this详细解析和如何确定this的值

Ø 它的值不能手动更改。

 1.2. this的难点

 Ø 到处都有this

只要你可以写js代码的地方,就可以使用this

Ø this的值是动态变化的

Ø 你可以修改this这个对象的某个属性,但不能修改this的值

 this详细解析和如何确定this的值

 1.3. 确定this的值

使用this有两种大类:

 1.3.1. 它在function的外部

    this详细解析和如何确定this的值

 一般它会出现在 function的内部。

 1.3.2. 它在function的内部。重点讨论!

   再分四种情况

1.在调用这个函数时,它不是某一个对象的属性,就是一个普通的被调用的函数。

2.函数是对象的方法。

3.如果在调用函数之前加一个new的话,会创建一个新的对象,而这个函数内部的this就会指向这个创建的对象。

4.如果它出现在对象的事件响应函数中,则它会指向这个对象。

1.3.2.1. 普通函数调用

 this详细解析和如何确定this的值

this的值就是window对象。

 f() === window.f();

 1.3.2.2. 当作对象的方法来调用

 this详细解析和如何确定this的值this详细解析和如何确定this的值

this的值就是当前这个对象。

 1.3.2.3. 以构造器的格式使用

 this详细解析和如何确定this的值

 当它被当作构造器来使用时,其中的this可以理解为:就是new 返回的那个对象。

 因为所有的加在this上的属性,最终都加在了f1上了。

 1.3.2.4. 事件回调函数

 this详细解析和如何确定this的值

 this的值就是当前的对象。

 1.3.3. 练习题

1.3.3.1. 1.

  this详细解析和如何确定this的值

 func() === window.func();

上面的代码中,输出this的语句都是相同的,不同的是调用这个function的方式不同,则得到的结果中,this的值完全不同!!!

 Var func = obj.f

相当于是:

 this详细解析和如何确定this的值

 此时,我们观察调用的方式是:

func()

这种形式是就我们说的:普通的函数调用,所以内部的this会指向window对象。

 1.3.3.2. 2.

  this详细解析和如何确定this的值

 

由于f1()的调用才是真正的输出this的语句,而现在f1并不属于某个对象,所以调用的格式 上就是一个普通的函数调用,所以其中的this就是window对象。

 1.3.3.3. 小结

 看这个函数如何被调用.

公式:

如果是: 对象obj.方法f(),则方法f中的this会指向这个对象obj.

 谁调用我,我就是指向谁。”