概述
首先必须要说的是,this 的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定 this 到底指向谁,实际上 this 的最终指向的是那个调用它的对象,那么接下来我会深入的探讨这个问题。function 执行默认返回 undefined
1 | function a() { |
在一般函数方法中使用 this 指代全局对象
1 | var ale = '外部'; |
作为对象方法调用,this 纸袋上级对象
1 | var ale = '外部'; |
这里的 this 指向 oObeject,因为这个 fn 是通过 oObeject 调用的,所以指向 oObeject,this 在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用 this 指像谁
作为构造函数调用,this 指代 new 出的对象
1 | var ale = '外部'; |
new 关键字可以改变 this 的指向,将这个 this 指向对象 test1,此时仅仅只是创建,并没有执行,而调用这个函数 Fn 的是对象 test1,那么 this 指向的自然是对象 test1
当函数中有 return 时
1 | function fn() { |
如果返回值是一个对象,那么 this 指向的就是那个返回的对象,如果返回值不是一个对象那么 this 还是指向函数的实例。
1 | function fn() { |
需要注意的是 还有一点就是虽然 null 也是对象,但是在这里 this 还是指向那个函数的实例,因为 null 比较特殊。
apply、call、bind 改变函数的调用对象,此方法的第一个参数为改变后调用这个函数的对象,this 指代第一个参数
1 | var x = '外部'; |