标签:
JavaScript 中的函数既可以被当作普通函数执行,也可以作为对象的方法执行,这是导致 this 含义如此丰富的主要原因。
var name="The Window" var object= { name : "My Object", getNameFunc : function() { return function() { return this.name; } } }
为什么这个的输出是The Window而下面的输出却是My Object?
var name="The Window" var object= { name : "My Object", getNameFunc : function() { var that = this; return function() { return that.name; } } }
调用代码alert(object.getNameFunc()());
javascript是动态(或者动态类型)语言,this关键字在执行的时候才能确定是谁。所以this永远指向调用者,即对‘调用对象‘者的引用。
第一部分通过代码:object.getNameFunc()调用返回一个函数。这是个返回的函数,它不在是object的属性或者方法,此时调用者是window。因此输出是 The Window
第二部分,当执行函数object.getNameFunc()后返回的是:
function()
{
return that.name;
}
此时的that=this。而this指向object,所以that指向object。无论你执行多少次,他都是对object的引用,所以输出My Object
由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
JavaScript 中函数的调用有以下几种方式:作为对象方法调用,作为函数调用,作为构造函数调用,和使用 apply 或 call 调用。
相关链接:
深入浅出javascript中的this: http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/
标签:
原文地址:http://www.cnblogs.com/zhuiluoyu/p/4683359.html