<html>
<head>
<script type="text/javascript"><!--
var context="全局";
var testObj={
context:"初始",
callback:function (str){
//回调函数
alert("callback:我所处的上下文中,context="+this.context+",我被回调的方式:"+str);
}
};
//创建一个对象,作为测试回调函数的上下文
testObj.context="已设置";
function testCall(){
callMethod(testObj.callback);
callObjMethod(testObj,testObj.callback);
}
function callMethod(method){
method("通过默认上下文回调");
}
function callObjMethod(obj,method){
method.call(obj,"指定显式对象上下文回调");
}
function testCall1(){
testObj.callback('直接执行');
}
// --></script>
</head>
<body> <a href="javascript:void(0)" οnclick="testCall()">调用测试</a>
<a href="javascript:void(0)" οnclick="testCall1()">调用测试1</a></body>
</html>
执行上面的代码,点击第一个链接,结果是:callback:我所处的上下文中,context=全局,我被回调的方式:通过默认上下文回调、callback:我所处的上下文中,context=已设置,我被回调的方式:指定显式对象上下文回调
点击第二个链接,结果是callback:我所处的上下文中,context=已设置,我被回调的方式:直接执行
结论:
1、在回调函数中的this,其上下文环境是调用者所在的执行环境;本例中,点击第一个链接时,执行的环境是callMethod>testCall>window
2、本例中,作为对象testObj中的方法调用,this值得是testObj对象本身。(例如 点击第二个链接的记过)