<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="js 嵌套函数指向this对象错误的解决方法" id="card1">
<p> 游客</p><p>
标题:js 嵌套函数指向this对象错误的解决方法<br/>
正文:<br/>
先看一段嵌套了两层function的JavaScript代码： <br/>代码如下:<br/>var me = { <br/>name : 'Jimbor', <br/>blog : 'http://jmedia.cn/', <br/>sayMyName : function(){ <br/>var pre = 'My name is: '; <br/>function displayName(){ <br/>alert(pre + this.name); <br/>} <br/>displayName(); <br/>} <br/>} <br/>me.sayMyName(); <br/><br/>从代码上看，我们希望通过sayMyName()的调用来显示me的name属性，即：My name is: Jimbor。但浏览器的执行结果是： <br/>代码如下:<br/>My name is: <br/><br/>是什么原因使name属性没有正确显示呢？原来JavaScript对于全局函数内的this绑定为全局对象，而对于嵌套函数也采用了相同的解释。这个错误产生的后果是不能轻易使用嵌套函数来完成某些特殊的任务，因为这些函数对this所指向的对象解释不同。 <br/>当然对于这个例子，我们完全可以不用嵌套的函数来完成相应的功能。但是对于某些应用可能会需要这种结构。幸运的是，我们还是有办法来纠正这个错误的。 <br/>方法一：用apply()函数 <br/>代码如下:<br/>apply(this_obj, params_array) <br/><br/>apply()函数可以在调用某个函数时重写this所指向的对象，它接受两个参数，第一个this_obj即想要重写this所指向的对象，params_array则是用来传递给调用函数的参数数组。我们把原来的代码改写为： <br/>代码如下:<br/>var me = { <br/>name : 'Jimbor', <br/>blog : 'http://jmedia.cn/', <br/>sayMyName : function(){ <br/>var pre = 'My name is: '; <br/>function displayName(){ <br/>alert(pre + this.name); <br/>}<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=839&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=839&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=839&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=839&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=839">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=839">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>