this的指向问题

 

1.this 的指向 在函数定义的时候时候确定不了的 有函数执行的时候才能确定this到底指向谁实际上this的最终指向的是哪个调用它的对象 

 

this指向最终调用它的对象 这里a是window调用的 。

 

这里的 是o对象调用的 所以this指向o;但是为什么下面的window之后还是指向o

 

同样 这里的也不是指向o 而是指向b。

情况一: 如果一个函数中有this 但是它没有上一级的对象所调用那么this就指向window(一般指向window), 这里指的是 严格版本的this指向的不是window。

情况二: 如果一个函数中有this,这个函数有被上一级的对象所调用那么this指向的就是上一级的对象

情况三 : 如果一个函数中有this  这个函数中包括多个对象尽管这个函数是被最外层的对象所调用但是this还是指向它的上一级对象

 

这里的this还是指向b 虽然没有属性a。

 

这里的this 为什么指向了window 因为this 是在调用的时候才能确定,这里只是将它赋给了j 但是没有调用 j()才是调用了所以是window调用了j() 所以this指向window

2.构造函数的this

这里的new关键字可以改变this的指向 将这个this指向对象a。

首先new的时候创建了一个空对象,this就指向这个空对象。变了a创建了一个A的实例 (相当于复制了一份A到对象a里面) 此时 仅仅只是创建 并没有执行,而调用这个函数A的是对象a。那么this指向的自然是对象a, 那么为什么对象A中会有name 因为已经复制了一份A函数到对象a中 用了new 相当于复制了一份。

3.当this碰到 return的时候

 

所以得出结论就是

如果返回值是一个对象那么this 指向的就是那个返回的对象。如果返回值不是一个对象那么this还是指向函数实例。(undefined 1 都是返回函数实例包括null)

4.补充

 

关于this为什么会指向a? new关键字会创建一个空的对象然后会自动调用一个函数apply方法。this指向这个空对象这样的话函数内部的this就会被这个空对象替代

 

posted on 2016-06-14 10:50  Befacebook  阅读(113)  评论(0)    收藏  举报