JavaScript 中的 this

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/

原文地址:https://www.cnblogs.com/zhuiluoyu/p/4683359.html