理解javascrpit中的this

javascript中的this是根据程序的上下文环境变化的,可以分为以下两种情况:

1.如果this所在的函数是直接被调用的,则this指向的是该函数所在上下文的对象。

2.如果this所在的函数是一个对象中的函数,则this指向的是拥有该函数的对象。以下举例说明:

假设有一js函数,其使用了一个this.num变量

var num= 1;

function testThis()

{

    alert(this.num);

}

1.直接调用testThis()

   //this指向的是调用该函数的上下文中的对象,则this.num指向的是调用该函数的上下文中的num

2.将testThis赋值给一个变量后再调用

   var myTestThis = testThis;

   myTestThis();//this指向的和直接调用testThis()一样,都为该函数所在上下文的对象。

3.将testThis赋值给一个对象的属性

   var myObj = {};

   myObj.num = 2;

   myObj.myTestThis = testThis;

   myObj.myTestThis ();//由于myTestThis是myObj对象的一个属性,则this指向的是拥有myTestThis属性的对象myObj

                                    //则this.num表示的是myObj.num

理解了以上三个例子,再看看是否可以理解下面两个例子:

   var name = "The Window";

   var object = {
 name : "My Object",

 getNameFunc : function(){
   return function(){
     return this.name;
        };

        function() func2 {
     return this.name;
        };

        return func2;

       }

   };

 alert(object.getNameFunc()());//注意调用该函数后面一定是两个括号()()

   这里涉及到了一个javascript中的一个概念:‘闭包’,简单来说闭包就是在一个函数内部调用另一个函数,该函数内部的函数中又使用了外层函数中的变量,对于这个object.getNameFunc()()函数调用来说,getNameFunc就是一个闭包,他的内部没有定义变量,所以this指向的是全局空间中的name变量,也即'The Window'。

    var name = "The Window";

  var object = {
  name : "My Object",

  getNameFunc : function(){
    var that = this;
    return function(){
      return that.name;
        };

      }

    };

  alert(object.getNameFunc()());

    这里,getNameFunc依旧是一个闭包,不同的是在getNameFunc内部,他引用了this变量,类似于上面例子3,此时的this指向的是拥有getNameFunc方法的对象object,that = this,则that指向的也即object,that.name即'My Object'。

 

    最后,关于js中的闭包可以参考这个网址:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

本文的最后两个例子就是从这篇文章中摘过来的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值