this

150 阅读2分钟

this到底是什么?

this是一个对象。这个对象是指向当前代码中的所需的各类资源。
this与执行上下文有关

三条定律

  1. 到处都有this(只要能够写js代码的地方,都可以访问this)
  2. this的值随时都可能会变,只有在调用的时候才能确定
  3. 不能手动的修改this的值、

四种情况

一般this都会在函数的内部出现,如果它出现在函数的内部,就会有如下情况,在函数被调用时:
  1. 这个函数不是某一个对象的属性(不是某个方法),就是一个普通的被调用的函数。
  2. 这个函数是一个具体的对象的属性
  3. 如果在调用函数之前加一个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的真正指向!