this详细解析和如何确定this的值
1.1. this是什么?
Ø 在 js中this是一个对象。
Ø 它的值是不确定的,只有在代码运行的过程中才能确定this的值。
Ø 它的值不能手动更改。
1.2. this的难点
Ø 到处都有this
只要你可以写js代码的地方,就可以使用this
Ø this的值是动态变化的
Ø 你可以修改this这个对象的某个属性,但不能修改this的值
1.3. 确定this的值
使用this有两种大类:
1.3.1. 它在function的外部
一般它会出现在 function的内部。
1.3.2. 它在function的内部。重点讨论!
再分四种情况
1.在调用这个函数时,它不是某一个对象的属性,就是一个普通的被调用的函数。
2.函数是对象的方法。
3.如果在调用函数之前加一个new的话,会创建一个新的对象,而这个函数内部的this就会指向这个创建的对象。
4.如果它出现在对象的事件响应函数中,则它会指向这个对象。
1.3.2.1. 普通函数调用
this的值就是window对象。
f() === window.f();
1.3.2.2. 当作对象的方法来调用
this的值就是当前这个对象。
1.3.2.3. 以构造器的格式使用
当它被当作构造器来使用时,其中的this可以理解为:就是new 返回的那个对象。
因为所有的加在this上的属性,最终都加在了f1上了。
1.3.2.4. 事件回调函数
this的值就是当前的对象。
1.3.3. 练习题
1.3.3.1. 1.
func() === window.func();
上面的代码中,输出this的语句都是相同的,不同的是调用这个function的方式不同,则得到的结果中,this的值完全不同!!!
Var func = obj.f
相当于是:
此时,我们观察调用的方式是:
func()
这种形式是就我们说的:普通的函数调用,所以内部的this会指向window对象。
1.3.3.2. 2.
由于f1()的调用才是真正的输出this的语句,而现在f1并不属于某个对象,所以调用的格式 上就是一个普通的函数调用,所以其中的this就是window对象。
1.3.3.3. 小结
看这个函数如何被调用.
公式:
如果是: 对象obj.方法f(),则方法f中的this会指向这个对象obj.
谁调用我,我就是指向谁。”