总结:
1.当函数作为对象的方法调用时,this指向该对象。
2.当函数作为淡出函数调用时,this指向全局对象(严格模式时,为undefined)
3.构造函数中的this指向新创建的对象
4.嵌套函数中的this不会继承上层函数的this,如果需要,可以用一个变量保存上层函数的this。
总结的简单点就是:
如果在函数中使用了this,只有在该函数直接被某对象调用时,该this才指向该对象。
可能经常会写这样的代码:
如果在handler中用了this,this会绑定在obj上么?显然不是,赋值以后,函数是在回调中执行的,this会绑定到$(“#some-div”)元素上。这就需要理解函数的执行环境。
这里要指出的时,理解js函数的执行环境,会更好地理解this。
如何能解决回调函数绑定的问题?ES5中引入了一个新的方法,bind():
thisArg
当绑定函数被调用时,该参数会作为原函数运行时的this指向.当使用new 操作符调用绑定函数时,该参数无效.
arg1, arg2, ...
当绑定函数被调用时,这些参数加上绑定函数本身的参数会按照顺序作为原函数运行时的参数.
该方法创建一个心函数,称为绑定函数,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数.
显然bind方法可以很好地解决上述问题。
其实该方法也很容易模拟,看下Prototype.js中bind方法的源码:
明白了么?
被javascript中的this迷惹的朋友,相信你看完本文,已经思路清晰了不少吧,如此,脚本学堂会有莫大的满足,哈~~!
这里有一篇更为深入点的文章:javascript面向对象之this用法举例 ,大家不妨参考下。
您可能感兴趣的文章:
JavaScript面向对象编程(入门参考)