this到底是什么?
this是一个对象。这个对象是指向当前代码中的所需的各类资源。
this与执行上下文有关三条定律
- 到处都有this(只要能够写js代码的地方,都可以访问this)
- this的值随时都可能会变,只有在调用的时候才能确定
- 不能手动的修改this的值、
四种情况
一般this都会在函数的内部出现,如果它出现在函数的内部,就会有如下情况,在函数被调用时:- 这个函数不是某一个对象的属性(不是某个方法),就是一个普通的被调用的函数。
- 这个函数是一个具体的对象的属性
- 如果在调用函数之前加一个new的话,会创建并返回一个新的对象,而这个函数内部的this就会指向这个对象。
this只能修改属性,不能覆盖。
4.可以通过Function对象的apply和call方法来指定函数内部的this的值
call方法(对象,参数1,参数2....);
apply方法(对象,[参数1,参数2...])结论
如果方法内部有this。如何确定这个this的值呢?
- 要方法被 调用 调用 调用 时确定
- 看方法前的那个对象是谁,this就指向谁。
(1)有明确的对象
例如:Obj.say();say 的当前对象是obj,所以say中的this 就指向obj。
(2)没有明确的对象
如果这个函数没有明确说是哪个对象的,则它肯定是属于window对象的,所以this就会指向window. - 如果是call和apply的方式,这时,this指向第一个参数
例如:f.call(obj1),f中的this指向obj1。
在调用方法时,才知道this的真正指向!