<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)" onclick="testCall()">调用测试</a> <a href="javascript:void(0)" onclick="testCall1()">调用测试1</a></body> </html>
执行上面的代码,点击第一个链接,结果是:callback:我所处的上下文中,context=全局,我被回调的方式:通过默认上下文回调、callback:我所处的上下文中,context=已设置,我被回调的方式:指定显式对象上下文回调
点击第二个链接,结果是callback:我所处的上下文中,context=已设置,我被回调的方式:直接执行
结论:
1、在回调函数中的this,其上下文环境是调用者所在的执行环境;本例中,点击第一个链接时,执行的环境是callMethod>testCall>window
2、本例中,作为对象testObj中的方法调用,this值得是testObj对象本身。(例如 点击第二个链接的记过)