在JavaScript中,你的代码将总是有着某种形式的上下文(代码在其内部工作的
对象)。这也是其它面向对象语言所共有的功能,但它们都不如JavaScript处理得这样极端。上下文是通过变量this工作。变量this总是引用代
码当前所在的那个对象。记住全局对象实际上是window对象的属性。这意味着即使是在全局上下文里,this
变量仍然引用一个对象。上下文可以成为一个强大的工具,是面向对象代码不可或缺的一环。程序1展示了一些关于上下文的简单例子。
程序1. 在上下文中使用函数然后将其上下文切换到另一个变量的例子
代码
?1
?var
?obj?
=
?{
?2
?yes:?
function
(){
?3
?//
?this?==?obj
?4
?this
.val?
=
?
true
;
?5
?},
?6
?no:?
function
(){
?7
?this
.val?
=
?
false
;
?8
?}
?9
?};
10
?//
我们看到,obj对象没有"val"的属性
11
?alert(?obj.val?
==
?
null
?);
12
?//
我们运行yes函数,它将改变附着在obj?对象的val属性
13
?obj.yes();
14
?alert(?obj.val?
==
?
true
?);
15
?//
然而,我们现在让window.no指向obj.no方法,并运行之
16
?window.no?
=
?obj.no;
17
?window.no();
18
?//
这导致obj对象保持不变(上下文则切换到了window对象),
19
?alert(?obj.val?
==
?
true
?);