代码改变世界

js——this关键字

2012-06-04 23:23  折翼的鸟  阅读(292)  评论(0编辑  收藏  举报

当一个函数并非一个对象的成员时、那么它被当做一个函数来调用、此时this被绑定到全局对象、如:

//创建myObject
var myObject = { 
  value : 0,
  Tempfunc: function(){
    var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已
      alert(this); //全局作用域
    }; 
    return function(){    //注意:这个匿名函数不是对象的直接成员
      alert(this.value);
    }
  }
}; 
myObject.Tempfunc()(); //undefined

这就是刚才所说的 如果包含this的最近的函数不是某个对象的成员,那么this的值便设为全局对象,
反过来如果包含this的函数(无论什么时候,javascript都会把this放到function内部)最近的函数是某个对象的成员时、那么this的值就是那个对象

如果内部函数想访问对象的属性有一个很容易解决的方案:如果该方法定义一个变量并且赋值为this,那么内部函数就可以通过那么变量访问到this,如下:

//创建myObject
var myObject = { 
  value : 0,
  Tempfunc: function(){
    var that = this;
    var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已
      alert(this); //全局作用域
    }; 
    return function(){    //注意:这个匿名函数不是对象的直接成员
      alert(that.value);
    }
  }
}; 
myObject.Tempfunc()();    //0

再来回顾一个简单的闭包例子:

var name = "Global name";
function funcA(){
  var name = "FuncA name";
  return function(){
    alert(this.name);
  };
}
funcA()(); //Global name

其实this和作用域没有什么关系、