this 的上下文
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
this 值是执行期上下文对象的一个属性(执行期上下文对象包括变量对象,作用域链以 及 this)。执行期上下文对象有三类,当进入不同的上下文时,this 的值会确定下来,并且 this 的值不能更改。结合前面小节讨论的内容,在执行全局代码时,控制流会进入全局执行期上下文,而在执行函数时,又会有函数执行期上下文。我们来看下面一个例子:
var global = this; var tom = {
name : "Tom",
home : "desine",
getInfo : function(){
print(this.name + ", from "+this.home);
}
};
tom.getInfo();
var jerry = {
name : "Jerry",
getInfo : tom.getInfo
}
jerry.getInfo();
global.getInfo = tom.getInfo;
global.getInfo();
执行结果为:
Tom, from desine
Jerry, from undefined
undefined, from undefined
tom 对象本身具有 name 和 home 属性,因此在执行 tom.getInfo 时,会打印 tom 对象上的这两个属性值。当将 global.getInfo 属性设置为 tom.getInfo 时,getInfo 中的 this 值,在运行时,事实上是 global 对象(还记得在全局执行期上下文对象中,global 的 变量对象的 this 值吗?)的变量对象中的 this 就是自身。而 global.name 和 global.home 都没有定义,因此会得到上边的结果。
从上例中还可以看到,在函数 getInfo 调用时,在 getInfo 之前的对象 (tom,jerry,global)会被作为 this 来执行。当然 global 可以省略,这时仍然是全局对象作 为 this。应该记住的是,this 的值取决于调用函数的方式(当然这里的 this 指函数上下文中 的 this,全局上下文的我们已经讨论过了)。
在线练习
{$ activeFileHint $}