﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-welkinwwl-文章分类-JavaScript</title><link>http://www.blogjava.net/welkinwwl/category/29461.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 15 Feb 2008 18:17:22 GMT</lastBuildDate><pubDate>Fri, 15 Feb 2008 18:17:22 GMT</pubDate><ttl>60</ttl><item><title>JavaScript中的继承(二) </title><link>http://www.blogjava.net/welkinwwl/articles/180141.html</link><dc:creator>welkin</dc:creator><author>welkin</author><pubDate>Fri, 15 Feb 2008 18:08:00 GMT</pubDate><guid>http://www.blogjava.net/welkinwwl/articles/180141.html</guid><wfw:comment>http://www.blogjava.net/welkinwwl/comments/180141.html</wfw:comment><comments>http://www.blogjava.net/welkinwwl/articles/180141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinwwl/comments/commentRss/180141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinwwl/services/trackbacks/180141.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;借鉴于Prototype框架中的继承机制的实现，我们可以更加有条理的改写我们的代码，让它看起来更加符合面向对象的风格。在prototype中的继承是使用extend方法，所以需要先要定义extend函数(为了方便理解，变量名称有改动)：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">为Object添加一个extend静态类方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_67_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_166_Open_Text.style.display='none'; Codehighlighter1_67_166_Closed_Image.style.display='inline'; Codehighlighter1_67_166_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_166_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_166_Closed_Text.style.display='none'; Codehighlighter1_67_166_Open_Image.style.display='inline'; Codehighlighter1_67_166_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">Object.extend</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">(destination,source)</span><span id="Codehighlighter1_67_166_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_67_166_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_94_142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_142_Open_Text.style.display='none'; Codehighlighter1_94_142_Closed_Image.style.display='inline'; Codehighlighter1_94_142_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_94_142_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_94_142_Closed_Text.style.display='none'; Codehighlighter1_94_142_Open_Image.style.display='inline'; Codehighlighter1_94_142_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(property&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;source)</span><span id="Codehighlighter1_94_142_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_94_142_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;destination[property]</span><span style="color: #000000">=</span><span style="color: #000000">source[property];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;destination;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">为Object添加extend方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_224_271_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_271_Open_Text.style.display='none'; Codehighlighter1_224_271_Closed_Image.style.display='inline'; Codehighlighter1_224_271_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_224_271_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_224_271_Closed_Text.style.display='none'; Codehighlighter1_224_271_Open_Image.style.display='inline'; Codehighlighter1_224_271_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">Object.prototype.extend</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">(o)</span><span id="Codehighlighter1_224_271_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_224_271_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Object.extend.apply(</span><span style="color: #0000ff">this</span><span style="color: #000000">,[</span><span style="color: #0000ff">this</span><span style="color: #000000">,o]);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
在prototype中定义extend方法分两步走。<br />
第一步，先为Object添加一个extend静态类方法，这个方法的作用是将原类(source)的所有属性和方法通过反射机制(for(... in ...))来传给目的类(destination)，最后返回目的类。<br />
第二步，为Object类的原形添加extend方法，在这个方法中调用了第一步中定义的Object类静态方法extend，apply方法中的第一个this是要绑定到的当前对象，第二个参数是个数组，数组中的this是对象本身，o是传进来的参数。这个extend方法的作用是将对象o的所有属性和方法赋值给对象自身，再将自身返回，得到的就是一个继承了调用extend方法的函数的所有属性和方法的类，你可以在调用extend方法时在其参数中用JSON格式来为其添加新方法/属性或是重写旧方法。<br />
<br />
下面我们就可以用这个extend方法了，我们还是举Person和Teacher的例子：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">定义基类Person</span><span style="color: #008000"><br />
<img id="Codehighlighter1_38_76_Open_Image" onclick="this.style.display='none'; Codehighlighter1_38_76_Open_Text.style.display='none'; Codehighlighter1_38_76_Closed_Image.style.display='inline'; Codehighlighter1_38_76_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_38_76_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_38_76_Closed_Text.style.display='none'; Codehighlighter1_38_76_Open_Image.style.display='inline'; Codehighlighter1_38_76_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Person(name,age)</span><span id="Codehighlighter1_38_76_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_38_76_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name</span><span style="color: #000000">=</span><span style="color: #000000">name;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age</span><span style="color: #000000">=</span><span style="color: #000000">age;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_95_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_152_Open_Text.style.display='none'; Codehighlighter1_95_152_Closed_Image.style.display='inline'; Codehighlighter1_95_152_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_95_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_152_Closed_Text.style.display='none'; Codehighlighter1_95_152_Open_Image.style.display='inline'; Codehighlighter1_95_152_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />Person.prototype</span><span style="color: #000000">=</span><span id="Codehighlighter1_95_152_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_95_152_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_116_150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_150_Open_Text.style.display='none'; Codehighlighter1_116_150_Closed_Image.style.display='inline'; Codehighlighter1_116_150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_116_150_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_116_150_Closed_Text.style.display='none'; Codehighlighter1_116_150_Open_Image.style.display='inline'; Codehighlighter1_116_150_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;shout:</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_116_150_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_116_150_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">I'm&nbsp;a&nbsp;person.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">定义Person子类Teacher</span><span style="color: #008000"><br />
<img id="Codehighlighter1_201_239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_239_Open_Text.style.display='none'; Codehighlighter1_201_239_Closed_Image.style.display='inline'; Codehighlighter1_201_239_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_201_239_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_201_239_Closed_Text.style.display='none'; Codehighlighter1_201_239_Open_Image.style.display='inline'; Codehighlighter1_201_239_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Teacher(name,age)</span><span id="Codehighlighter1_201_239_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_201_239_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name</span><span style="color: #000000">=</span><span style="color: #000000">name;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age</span><span style="color: #000000">=</span><span style="color: #000000">age;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_281_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_281_339_Open_Text.style.display='none'; Codehighlighter1_281_339_Closed_Image.style.display='inline'; Codehighlighter1_281_339_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_281_339_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_281_339_Closed_Text.style.display='none'; Codehighlighter1_281_339_Open_Image.style.display='inline'; Codehighlighter1_281_339_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />Teacher.prototype</span><span style="color: #000000">=</span><span style="color: #000000">(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person()).extend(</span><span id="Codehighlighter1_281_339_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_281_339_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_302_337_Open_Image" onclick="this.style.display='none'; Codehighlighter1_302_337_Open_Text.style.display='none'; Codehighlighter1_302_337_Closed_Image.style.display='inline'; Codehighlighter1_302_337_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_302_337_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_302_337_Closed_Text.style.display='none'; Codehighlighter1_302_337_Open_Image.style.display='inline'; Codehighlighter1_302_337_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;shout:</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_302_337_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_302_337_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">I'm&nbsp;a&nbsp;teacher.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">);</span></div>
这里与先前的例子不同的是在定义Person和Teacher时，将构造函数和方法的定义分开，定义方法时使用JSON格式，这样看起来就更符合面向对象的风格了，注意Teacher继承Person的时候，在调用extend方法时又重写了Person的shout方法，这里也是使用JSON格式。<br />
好！我们来测试一下吧！<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;p</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">tom</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">18</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义Person对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;t</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Teacher(</span><span style="color: #000000">"</span><span style="color: #000000">Green</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">33</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">定义Teacher对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">p.shout();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />t.shout();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
我们将看到结果：<br />
第一个对话框："I'm a person."<br />
第二个对话框："I'm a teacher."<br />
<img src ="http://www.blogjava.net/welkinwwl/aggbug/180141.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinwwl/" target="_blank">welkin</a> 2008-02-16 02:08 <a href="http://www.blogjava.net/welkinwwl/articles/180141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中的继承(一)</title><link>http://www.blogjava.net/welkinwwl/articles/180140.html</link><dc:creator>welkin</dc:creator><author>welkin</author><pubDate>Fri, 15 Feb 2008 17:22:00 GMT</pubDate><guid>http://www.blogjava.net/welkinwwl/articles/180140.html</guid><wfw:comment>http://www.blogjava.net/welkinwwl/comments/180140.html</wfw:comment><comments>http://www.blogjava.net/welkinwwl/articles/180140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/welkinwwl/comments/commentRss/180140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/welkinwwl/services/trackbacks/180140.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;在javascript中不存在面向对象中的继承关系，我们可以通过很多种手段来实现继承机制，先看一个简单的例子：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">基类Person</span><span style="color: #008000"><br />
<img id="Codehighlighter1_36_129_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_129_Open_Text.style.display='none'; Codehighlighter1_36_129_Closed_Image.style.display='inline'; Codehighlighter1_36_129_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_36_129_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_36_129_Closed_Text.style.display='none'; Codehighlighter1_36_129_Open_Image.style.display='inline'; Codehighlighter1_36_129_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Person(name,age)</span><span id="Codehighlighter1_36_129_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name</span><span style="color: #000000">=</span><span style="color: #000000">name;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age</span><span style="color: #000000">=</span><span style="color: #000000">age;<br />
<img id="Codehighlighter1_95_127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_127_Open_Text.style.display='none'; Codehighlighter1_95_127_Closed_Image.style.display='inline'; Codehighlighter1_95_127_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_95_127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_127_Closed_Text.style.display='none'; Codehighlighter1_95_127_Open_Image.style.display='inline'; Codehighlighter1_95_127_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.shout</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_95_127_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">I'm&nbsp;a&nbsp;person.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">Person子类Teacher</span><span style="color: #008000"><br />
<img id="Codehighlighter1_176_245_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_245_Open_Text.style.display='none'; Codehighlighter1_176_245_Closed_Image.style.display='inline'; Codehighlighter1_176_245_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_176_245_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_245_Closed_Text.style.display='none'; Codehighlighter1_176_245_Open_Image.style.display='inline'; Codehighlighter1_176_245_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Teacher(name,age)</span><span id="Codehighlighter1_176_245_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.temp</span><span style="color: #000000">=</span><span style="color: #000000">Person;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.temp(name,age);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">delete</span><span style="color: #000000">&nbsp;temp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;我们先定义了一个Person类（我习惯站在面向对象的角度来称呼它，当然，你可以称它为函数），含有两个属性name,age和一个方法shout，让Teacher类继承Person类的办法是为Teacher添加一个临时函数temp，先让temp指向Person这个构造函数，然后调用temp(name,age)时实际则是调用了Person(name,age)这个构造函数，这样就Teacher就继承了Person的所有属性和方法，最后只需删除temp这个临时函数即可。当然，如果你需要为Teacher添加新的方法或是重写Person的方法时，你可以在delete temp之后添加。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;上面的例子也可以用call函数或apply函数实现，这样用起来更加简单：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">基类Person</span><span style="color: #008000"><br />
<img id="Codehighlighter1_36_129_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_129_Open_Text.style.display='none'; Codehighlighter1_36_129_Closed_Image.style.display='inline'; Codehighlighter1_36_129_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_36_129_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_36_129_Closed_Text.style.display='none'; Codehighlighter1_36_129_Open_Image.style.display='inline'; Codehighlighter1_36_129_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Person(name,age)</span><span id="Codehighlighter1_36_129_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_36_129_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name</span><span style="color: #000000">=</span><span style="color: #000000">name;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age</span><span style="color: #000000">=</span><span style="color: #000000">age;<br />
<img id="Codehighlighter1_95_127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_127_Open_Text.style.display='none'; Codehighlighter1_95_127_Closed_Image.style.display='inline'; Codehighlighter1_95_127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_95_127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_127_Closed_Text.style.display='none'; Codehighlighter1_95_127_Open_Image.style.display='inline'; Codehighlighter1_95_127_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.shout</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_95_127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_95_127_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">I'm&nbsp;a&nbsp;person.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">Person子类Teacher</span><span style="color: #008000"><br />
<img id="Codehighlighter1_176_272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_272_Open_Text.style.display='none'; Codehighlighter1_176_272_Closed_Image.style.display='inline'; Codehighlighter1_176_272_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_176_272_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_272_Closed_Text.style.display='none'; Codehighlighter1_176_272_Open_Image.style.display='inline'; Codehighlighter1_176_272_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Teacher(name,age)</span><span id="Codehighlighter1_176_272_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_176_272_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this.temp=Person;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this.temp(name,age);</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">delete&nbsp;temp;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;Person.call(</span><span style="color: #0000ff">this</span><span style="color: #000000">,name,age);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
用apply实现只需将Teacher中Person.call(<span style="color: #0000ff">this</span><span style="color: #000000">,name,age);</span>换为Person.apply(this,[name,age]);
<img src ="http://www.blogjava.net/welkinwwl/aggbug/180140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/welkinwwl/" target="_blank">welkin</a> 2008-02-16 01:22 <a href="http://www.blogjava.net/welkinwwl/articles/180140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>