对于前端开发者来说,this是一个让人又爱又恨的小妖精。应用得好,项目事半功倍,应用得不好,项目可能漏洞百出。接下来本文就将揭开this的神秘面纱。(鄙人第一次鼓足了胆子写博客,望路过的大神轻踩
)
如上述代码,全局环境或调用普通函数,this指向都为window。So第一种情况中,当把Pp构造函数当做普通函数调用时,Pp函数内的this同样会指向为window。另外需要注意的一点是,上述obj.pp()代码,pp函数被当做obj的一个属性调用,故其中的this指向为obj对象,但pp函数内的fn函数调用并非当做obj对象的一个属性,故fn函数内部的this指向为window。
![委屈](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wronged.gif)
首先强调的一点是,在函数中this指向不是在定义的时候确定的,而是在真正运行此函数时确定的。因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。
第一种情况,构造函数中,关于构造函数的概念在此不赘述了,如想了解可自行百度谷歌。
第二种情况,函数作为对象的一个属性。
第三种情况,函数用call或apply调用。
第四种情况,也是最常见的一种情况,调用普通函数。
如上述代码,全局环境或调用普通函数,this指向都为window。So第一种情况中,当把Pp构造函数当做普通函数调用时,Pp函数内的this同样会指向为window。另外需要注意的一点是,上述obj.pp()代码,pp函数被当做obj的一个属性调用,故其中的this指向为obj对象,但pp函数内的fn函数调用并非当做obj对象的一个属性,故fn函数内部的this指向为window。