- this是一个关键字,不是变量,也不是属性名,在JavaScript中不允许给this赋值。
- 关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。
实例1:
var o={
m:function(){
var self=this;
console.log(this===o); //true
f(); //调用嵌套函数
//嵌套的函数不会从调用它的函数中继承this
function f() {
console.log(this===o);//false ,this的值是全局对象或者undefined
console.log(self===o);//ture
}
}
}
- 如果嵌套的函数作为方法调用,其this的值指向调用它的对象;如果嵌套的函数作为函数调用,其this值是全局变量(非严格模式下)或者是undefined(严格模式下)。一定不能误以为调用嵌套函数时this会指向调用外层函数的上下文,如果想访问外层函数的this,可以将该this值保存在一个变量中。————《JavaScript权威指南》
- this在《javascript高级程序设计》一书给出的解释是:
this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,this等于那个对象。不过,匿名函数具有全局性,因此this对象通常指向window。
实例2:
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){ //这个函数是作为对象的方法调用
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());//result:The Window
小结
- 在全局环境中调用一个函数,函数中的this对象指向的是全局变量window(非严格模式下)
- 通过一个对象来调用其内部的方法,该方法内的this指向的是调用它的对象。但是如果该方法内还定义了其他函数,则这些函数的this指向还是全局变量window(非严格模式下)
- 关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this