<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>zxmlgh</title>
    <description>我能</description>
    <link>http://zxmlgh.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>提速javascript开发(二)</title>
        <author>zxmlgh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zxmlgh.javaeye.com">zxmlgh</a>&nbsp;
          链接：<a href="http://zxmlgh.javaeye.com/blog/58698" style="color:red;">http://zxmlgh.javaeye.com/blog/58698</a>&nbsp;
          发表时间: 2007年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div><strong>
<div><a href="mailto:我的邮箱是zxmloveforever@163.com"><font color="#0000ff"><span><span>我的邮箱是</span>zxmloveforever@163.com</span>，欢迎大家来信指点指点。</font></a></div>
</strong></div>
<div><strong>例子</strong>：</div>
<div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//得到当前对象的名称 </span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>Object.prototype.getClassName&nbsp;=&nbsp;</span><span class="keyword">function</span><span>() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.toString().match(/</span><span class="keyword">function</span><span>\s*(\w+)/)[1]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;实现单一多层结构的继承 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;@param&nbsp;arguments[0]&nbsp;指定的类名，非字符串型，不可以是null。 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>Object.prototype.inherit&nbsp;=&nbsp;</span><span class="keyword">function</span><span>() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!(arguments[0]&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;Object))&nbsp;</span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Error(</span><span class="string">&quot;you&nbsp;can&nbsp;just&nbsp;inherit&nbsp;from&nbsp;a&nbsp;Object&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>[</span><span class="string">&quot;parent&quot;</span><span>])&nbsp;</span><span class="keyword">throw</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Error(</span><span class="string">&quot;there&nbsp;have&nbsp;inherited&nbsp;class,you&nbsp;can't&nbsp;inherit&nbsp;class&nbsp;&quot;</span><span>+arguments[0].getClassName());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">catch</span><span>(e){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(e.message); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;arg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Array(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;&nbsp;i </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;arg[i]&nbsp;=&nbsp;arguments[i+1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;temp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;arguments[0](arg);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i&nbsp;</span><span class="keyword">in</span><span>&nbsp;temp){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!</span><span class="keyword">this</span><span>[i]) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>[i]&nbsp;=&nbsp;temp[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>[</span><span class="string">&quot;parent&quot;</span><span>]&nbsp;=&nbsp;temp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="comment">//用来访问父类的public资源 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>Object.prototype.father&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.parent==</span><span class="keyword">null</span><span>)&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.parent[arguments[0]]){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;temp&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.parent[arguments[0]].toString(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(temp.indexOf(</span><span class="string">&quot;function&quot;</span><span>)&lt;0) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.parent[arguments[0]]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;arg&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Array(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i=0;&nbsp;i </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arg[i]&nbsp;=&nbsp;arguments[i+1]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>.parent[arguments[0]](arg); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.parent.father(arguments); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//与javascript的关键字typeof区别在：o大写 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>Object.prototype.typeOf&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;target&nbsp;=&nbsp;arguments[0]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;result&nbsp;=&nbsp;</span><span class="keyword">this</span><span>&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;target; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!result){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;temp&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.parent; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(temp!=</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;temp&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;target; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!result) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;temp.parent; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;result;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//将子类转换成父类，注意:如果子类覆盖了父类的方法，那么换转后的类，该方法的实现仍然是子类中的实现版 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>Object.prototype.toParent&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;result&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;target&nbsp;=&nbsp;arguments[0]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;flag&nbsp;=&nbsp;</span><span class="keyword">this</span><span>&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;target; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!flag){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;temp&nbsp;=&nbsp;</span><span class="keyword">this</span><span>.parent; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(temp!=</span><span class="keyword">null</span><span>){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;temp&nbsp;</span><span class="keyword">instanceof</span><span>&nbsp;target; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!flag) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;temp.parent; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;{}; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;p&nbsp;</span><span class="keyword">in</span><span>&nbsp;temp){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>[p]) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[p]&nbsp;=&nbsp;</span><span class="keyword">this</span><span>[p]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[p]&nbsp;=&nbsp;temp[p]; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">break</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;</span><span class="keyword">this</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;result; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;下面的继承关系是A&nbsp;inheritB,B&nbsp;inherit&nbsp;C，D是一个测试多态的方法 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;A(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.inherit(B,</span><span class="string">&quot;x&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.inherit(C);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locate1&nbsp;=&nbsp;</span><span class="string">&quot;1oh&quot;</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.locate2&nbsp;=&nbsp;</span><span class="string">&quot;2oh&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//A类继承B中的methodB1()，并且在自己的method1中调用B的methodB1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;A:test继承&mdash;&mdash;I&nbsp;am&nbsp;use&nbsp;B's&nbsp;variant:&nbsp;&quot;</span><span>+</span><span class="keyword">this</span><span>.methodB1(</span><span class="keyword">true</span><span>));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//A类覆盖B中的method2()，并且在自己的method2中调用B的method2 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method2&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;str&nbsp;=&nbsp;</span><span class="string">&quot;A:test覆盖method2，result&nbsp;is：&quot;</span><span>+</span><span class="keyword">this</span><span>.father(</span><span class="string">&quot;method2&quot;</span><span>,</span><span class="string">&quot;ok&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//A类覆盖了类C中的method3 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method3&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;excuting&nbsp;class&nbsp;A's&nbsp;method&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;B(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.inherit(C,</span><span class="string">&quot;y&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locateB2&nbsp;=&nbsp;</span><span class="string">&quot;&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locateB1&nbsp;=&nbsp;arguments[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.methodB1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(flag){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(flag) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;locateB1; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;A&nbsp;converted&nbsp;B&nbsp;is&nbsp;success&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method2&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;str&nbsp;=arguments[0]+</span><span class="string">&quot;&nbsp;B's&nbsp;&quot;</span><span>+locateB1+</span><span class="string">&quot;&nbsp;&quot;</span><span>+</span><span class="keyword">this</span><span>.method1();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;str; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//B类覆盖了类C中的method3 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method3&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;excuting&nbsp;class&nbsp;B's&nbsp;method&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;C(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locate1&nbsp;=&nbsp;arguments[0]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;C's&nbsp;&quot;</span><span>+locate1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method3&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;locate1; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;在这个方法中，只会对C类的method3方法，如果参数是C的子类也会处理这个参数的method3方法。 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;D(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;target&nbsp;=&nbsp;arguments[0]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(!target.typeOf(C)){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;upper&nbsp;my&nbsp;scope&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;test多态：&quot;</span><span>+target.method3());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">var</span><span>&nbsp;a&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;A; &nbsp;&nbsp;</span> </li>
    <li class=""><span>a.method1();</span><span class="comment">//在其中调用了从B中继承过来的methodB1() </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>a.method2();</span><span class="comment">//A类覆盖B中的method2()，并且在自己的method2中调用B的method2 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;temp&nbsp;=&nbsp;a.toParent(B); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>alert(temp.methodB1(</span><span class="keyword">false</span><span>)+</span><span class="string">&quot;:&nbsp;&quot;</span><span>+temp.method3());</span><span class="comment">//转换成父类后，对象执行的方法仍然是子类版的。 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;b&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;B(</span><span class="string">&quot;b^-^&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>D(a); &nbsp;&nbsp;</span> </li>
    <li class=""><span>D(b); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="comment">//现在业务需要，扩展出一个E </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">function</span><span>&nbsp;E(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.inherit(C,</span><span class="string">&quot;change&nbsp;is&nbsp;so&nbsp;much!&quot;</span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>D(</span><span class="keyword">new</span><span>&nbsp;E());</span><span class="comment">//扩展性与通用性的表现</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<div><span style="COLOR: blue">【<strong>注意事项</strong>】：</span></div>
<div style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt"><span>1）&nbsp;</span>需要用这种继承的写法，请将下面的方法当作javascript 的api，不要覆盖。
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 42.15pt; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: silver; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>方法名称</strong></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>方法作用</strong></div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>参数说明</strong></div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt; COLOR: black">getClassName</span></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>获得对象的名称。</div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div>无</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt; COLOR: black">inherit</span></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div align="left"><span style="FONT-SIZE: 10pt">实现对象之间的单一多层的继承</span></div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="left"><span style="FONT-SIZE: 10pt">1</span><span style="FONT-SIZE: 10pt">：被继承的父类名，非字符串</span></div>
            <div><span style="FONT-SIZE: 10pt">2</span><span style="FONT-SIZE: 10pt">：父类初始化需要的参数</span></div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt; COLOR: black">father</span></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>如果子类覆盖了父类的某个方法，用它来回调父类的这个方法</div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt">1</span><span style="FONT-SIZE: 10pt">：回调的方法名称，字符串格式</span></div>
            <div><span style="FONT-SIZE: 10pt">2</span><span style="FONT-SIZE: 10pt">：回调方法需要的参数</span></div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt; COLOR: black">typeOf</span></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>判断子类的类型，与<strong>typeof</strong>是不一样的。</div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div>类的名称,非字符串形式。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="174" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 130.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="FONT-SIZE: 10pt; COLOR: black">toParent</span></div>
            </td>
            <td valign="top" width="216" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 162pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>将子类转换成父类</div>
            </td>
            <td valign="top" width="199" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 149.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div>父类的名字，非字符串形式。</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<span>2）&nbsp;</span>在子类的<strong><span style="COLOR: red">第一行</span></strong>执行继承。如果要覆盖父类的某个方法，并且要用父类的这个方法，那么请在子类的方法中回调父类的那个方法。</div>
<div>&nbsp;</div>
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><font size="3">3.3、活用闭包</font></strong></div>
<div>所谓闭包，通俗的讲，使用函数的范围，已经不在函数的定义范围。</div>
<div><strong>优点</strong>：进一步<span style="COLOR: red">提高代码的封装性。</span></div>
<div><strong>缺点</strong>：ie6的垃圾收集机制存在着bug，当进行ui编码时会出现一些问题。</div>
<div><strong>闭包的特点</strong></div>
<div>1、作为一个函数变量的一个引用 - 当函数返回时，其处于激活状态。<br />
2、一个闭包就是当一个函数返回时，一个没有释放资源的栈区。</div>
<div style="MARGIN: 6pt 0cm"><strong>闭包的写法</strong></div>
<div style="MARGIN: 6pt 0cm">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;A(){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;answer1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;这里提供复杂功能1&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;answer2&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;这里提供复杂功能2&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.getAnswer&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(flag){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(flag) &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;answer1; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;answer2; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;control&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;A(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">var</span><span>&nbsp;a1&nbsp;=&nbsp;control.getAnswer(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;a2&nbsp;=&nbsp;control.getAnswer(</span><span class="keyword">false</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>a1();</span><span class="comment">//弹出文字:这里提供复杂功能1 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>a2();</span><span class="comment">//弹出文字:这里提供复杂功能2 </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;1）通过闭包，对象A将自己的资源提供给了外部。 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*&nbsp;2）并且外部的代码对a1之类的变量做出了改变，不会影响到A对象内部 </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;下面对A类稍作修改，我们看看效果 </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">function</span><span>&nbsp;A(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;answer1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;这里提供复杂功能1&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;answer2&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(str){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;这里提供复杂功能2&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.getAnswer&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(flag){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(flag) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;answer1; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;answer2; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.answer&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;answer1(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;control&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;A(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">var</span><span>&nbsp;a1&nbsp;=&nbsp;control.getAnswer(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>a1(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>a1&nbsp;=&nbsp;</span><span class="string">&quot;1&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>control.answer();</span><span class="comment">//弹出文字:这里提供复杂功能1 </span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<div style="MARGIN: 6pt 0cm">
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><font size="3">3.4、函数式编程</font></strong></div>
<div>它的基本特点是：将函数(或对象)赋值给一个变量。前面我们已经采用了这种写法。</div>
<div>优点：代码可读性好。适合web页ui方面的开发</div>
<strong><span style="FONT-SIZE: 10.5pt">错误的写法
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;A(){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(B()); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;B&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;ok&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>A();&nbsp;&nbsp;</span> </li>
</ol>
</div>
</span></strong></div>
<div><strong>正确的写法
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;A(){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;B&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;ok&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(B());&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>A();&nbsp;&nbsp;</span> </li>
</ol>
</div>
</strong></div>
<p><strong>附：javascript是非常灵活的：</strong></p>
<p>1）<font color="#ff0000">基于对象的</font>：有对象与类的概念，也有独立于对象的函数概念</p>
<p>2）<font color="#ff0000">解释型</font>：请把握住运行时与时间轴这个概念：它能自动转化变量的类型与这个特点紧密相连;一段代码是当作函数，还是一个类，也与这个有关。</p>
<p>2）弱类型：会将变量自动转化为当前合适的类型或者基本数据类型，这个特点基于它是解释型的语言。</p>
<p>这些充分体现了javascript的灵活型。建议使用它，不要走极端：将其对象的一面<font color="#ff0000">在需要的</font>时候充分运用，但没有必要任何情况下都这样做。<font color="#ff0000">所谓灵活</font>：在不同的情况，可以有适合的方式可用。</p>
<p>（完）</p>
          <br/>
          <span style="color:red;">
            <a href="http://zxmlgh.javaeye.com/blog/58698#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 Mar 2007 01:44:54 +0800</pubDate>
        <link>http://zxmlgh.javaeye.com/blog/58698</link>
        <guid>http://zxmlgh.javaeye.com/blog/58698</guid>
      </item>
      <item>
        <title>提速javascript开发(一)</title>
        <author>zxmlgh</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zxmlgh.javaeye.com">zxmlgh</a>&nbsp;
          链接：<a href="http://zxmlgh.javaeye.com/blog/58691" style="color:red;">http://zxmlgh.javaeye.com/blog/58691</a>&nbsp;
          发表时间: 2007年03月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div><a href="mailto:我的邮箱是zxmloveforever@163.com"><font color="#0000ff"><span><span>我的邮箱是</span>zxmloveforever@163.com</span>，欢迎大家来信指点指点。</font></a></div>
<div>&nbsp;</div>
<div style="TEXT-INDENT: 21pt">Web开发时，我们可能经常抱怨，javascript。它太耗时间精力，甚至让我们觉得它恶心。服务器端，我们有优秀的java语言和webwork、spring等框架来帮助我们提高效率。而客户端只有灵活、难以掌握的javascript，那么我们的希望在哪呢？但愿下面的内容能够对你有些帮助。</div>
<div>&nbsp;</div>
<div style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt"><strong><font size="4"><span>1、</span>它是怎样的？</font></strong></div>
<div style="TEXT-INDENT: 21pt">Javascript目前由二块构成：Core(核心部分)＋DOM实现部分。（DOM是w3c定义的针对HTML、XML文档编程的一系列接口。通过这些接口，我们可以改变文档结点的结构、样式、内容。实现这些接口的语言可以是java、Python，javascript等。）</div>
<div style="TEXT-INDENT: 21pt">&nbsp;</div>
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center" style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt; TEXT-ALIGN: center"><strong>Core</strong></div>
            </td>
            <td valign="top" width="514" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 385.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>定义了语法规则，及内置的全局对象(Date、Function等)，全局方法(parseFloat)，全局属性（NaN，undefined等）</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center" style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt; TEXT-ALIGN: center"><strong>Dom</strong></div>
            </td>
            <td valign="top" width="514" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 385.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>针对HTML文档与ＸＭＬ文档操作的API</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt"><strong><font size="4"><span>2、<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span>慢在哪？</font></strong></div>
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><span style="FONT-SIZE: 12pt">2.1</span><span style="FONT-SIZE: 12pt">、</span><font size="3">java VS javascript</font></strong></div>
<div style="TEXT-INDENT: 20.25pt">Java是面向对象的代表性语言之一，面向对象语言是时下比较流行、开发效率高的主流开发语言。<strong>面向对象语言包括几个主要特性：抽象，继承，封装和多态。</strong>Javascript本质上不是面向对象的，而是基于对象的。基于对象的语言对上面四个特性<strong>支持很差，或者只支持部分</strong>特性。</div>
<div>&nbsp;</div>
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 42.15pt; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>&nbsp;</strong></div>
            </td>
            <td valign="top" width="99" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 74.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>抽象</strong></div>
            </td>
            <td valign="top" width="132" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 99.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>继承</strong></div>
            </td>
            <td valign="top" width="137" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 102.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>多态</strong></div>
            </td>
            <td valign="top" width="146" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>封装</strong></div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center" style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt; TEXT-ALIGN: center"><strong>java</strong></div>
            </td>
            <td valign="top" width="99" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 74.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>具备：类，接口，抽象类四个概念</div>
            </td>
            <td valign="top" width="132" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 99.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>支持：</div>
            <div>通过关键字</div>
            <div>Extends，implements实现</div>
            </td>
            <td valign="top" width="137" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 102.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div>支持：</div>
            <div>1)表现在对象的方法可以重载</div>
            <div>2)子类可以被当作父类处理</div>
            </td>
            <td valign="top" width="146" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div>支持：</div>
            <div>private,</div>
            <div>friendly,</div>
            <div>protected,</div>
            <div>public</div>
            <div>四个级别的封装</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>javascript</strong></div>
            </td>
            <td valign="top" width="99" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 74.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div><span style="COLOR: red">仅具备</span>：</div>
            <div>类，这一个概念</div>
            </td>
            <td valign="top" width="132" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 99.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div><span style="COLOR: red">支持很差</span>：</div>
            <div>通过prototype实现;</div>
            <div>Function的apply或call方法间接实现。</div>
            </td>
            <td valign="top" width="137" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 102.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="COLOR: red">不支持</span></div>
            </td>
            <td valign="top" width="146" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: white; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 109.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="COLOR: red">支持很差：</span>仅支持private,</div>
            <div>public二个级别</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td rowspan="2" valign="top" width="74" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 55.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center"><strong>比较结果</strong></div>
            </td>
            <td valign="top" colspan="4" width="514" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 385.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>1<strong><span style="COLOR: red">恶劣的继承</span></strong>导致：无法实现子类与父类之间关系的判断，并且子类无法转化成父类。所以无法根据类的类型处理业务：处理父类的代码，无法处理子类。&mdash;&mdash;扩展性差</div>
            <div>2 <strong><span style="COLOR: red">陈旧的代码书写方式</span></strong>导致：本不好的封装性变的更加差劲。这样对象间的隔离成本增加，内聚性弱。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" colspan="4" width="514" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 385.85pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><span style="COLOR: red">大大降低了开发效率</span></div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><font size="3">2.2、浏览器的兼容性</font></strong></div>
<div>Core与Dom部分都存在着浏览器平台的差异性，<strong><span style="COLOR: red">进一步降低了开发的效率。</span></strong></div>
<div><strong>&nbsp;</strong></div>
<div style="MARGIN: 14pt 0cm 14.5pt 36pt; TEXT-INDENT: -36pt"><strong><font size="4"><span>3、<span style="FONT: 7pt 'Times New Roman'">&nbsp;</span></span>开始加速</font></strong></div>
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><font size="3">3.1、加强封装性</font></strong></div>
<div><strong><font size="2">提倡的写法</font></strong></div>
<div align="left">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;A(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locate1&nbsp;=&nbsp;</span><span class="string">&quot;1oh&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.locate2&nbsp;=&nbsp;</span><span class="string">&quot;2oh&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;method1&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(locate1); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.method2&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="keyword">this</span><span>.locate2); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method1(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
A对象的locate1与method1是private级别的; locate2与method2是public级别的。</div>
<div><strong><span style="COLOR: red">优点：</span></strong>封装性好，实现代码变化的隔离。</div>
<div><strong><span style="COLOR: red">缺点：</span></strong>代码可读性差。</div>
<div><strong><span style="COLOR: red">弥补方式：</span></strong>利用javascript的优秀插件，如：jseclipse。</div>
<div><strong><font size="1"><font size="3"><font size="2">禁止的写法</font>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;A(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;locate1&nbsp;=&nbsp;</span><span class="string">&quot;1oh&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;method1=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(locate1); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>A.prototype={ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;locate2:</span><span class="string">&quot;2oh&quot;</span><span>,&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;method2:</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="keyword">this</span><span>.locate2); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;method3:</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(locate1); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method1(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">var</span><span>&nbsp;a&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;A(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>a.method2(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>a.method3();&nbsp;&nbsp;</span> </li>
</ol>
</div>
</font></font></strong></div>
<div>&nbsp;</div>
<div><strong><span style="COLOR: red">优点：</span></strong><strong>代码可读性好。</strong></div>
<div><strong><span style="COLOR: red">缺点：</span></strong></div>
<div><strong>&nbsp;</strong></div>
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 42.15pt; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div align="center" style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt; TEXT-ALIGN: center"><strong>没有全局的私有变量</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>如果执行<span style="FONT-SIZE: 10pt; COLOR: black">a.method3();</span>根本无法访问变量locate1。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt"><strong>prototype</strong><strong>中的方法是公共的。</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>a.method2()成功访问，在prototype中定义的方法是public级别;无法在prototype中定义全局的private变量。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt"><strong>总体效果</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span>1）&nbsp;</span>封装性极其差</div>
            <div style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt"><span>2）&nbsp;</span>代码调用不方便。</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div style="MARGIN: 6pt 0cm; LINE-HEIGHT: normal; punctuation-wrap: simple"><strong><font size="3">3.2 类继承</font></strong></div>
<div style="MARGIN: 6pt 0cm"><strong>禁止写法</strong></div>
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 7.9pt">
            <td rowspan="2" valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 7.9pt">
            <div style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt"><strong>prototype继承</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 7.9pt; BACKGROUND-COLOR: transparent">
            <div><span style="COLOR: red">万恶之首</span>：目前有很多继承写法，都是直接或者间接使用它。<span style="COLOR: red">严重破坏封装性。</span></div>
            </td>
        </tr>
        <tr style="HEIGHT: 7.85pt">
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 7.85pt; BACKGROUND-COLOR: transparent">
            <div><span style="COLOR: red">没法实现多态</span>：只是简单的复用，这种继承意义不大。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div style="MARGIN: 0cm 0cm 0pt 0.4pt; TEXT-INDENT: -0.4pt"><strong>apply,</strong><strong>或者call</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div><span style="FONT-SIZE: 10pt; COLOR: red">只是复用</span><span style="FONT-SIZE: 10pt">：简单的在当前对象中，执行对象之外的另一个方法。</span></div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>&nbsp;</div>
<div>这几种javascript的继承写法虽然目前被大量的使用，但是他们的缺点是明显的，因此我们不建议采用这些常见的javascript继承写法。</div>
<div><font size="2">&nbsp;<strong>推荐写法</strong></font></div>
<div>例子很长，先给大家一些看完的动力吧，下面是它的优点。</div>
<div>&nbsp;</div>
<div align="center">
<table cellspacing="0" border="1" width="589" cellpadding="0" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: auto auto auto 42.15pt; BORDER-LEFT: medium none; WIDTH: 441.6pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse">
    <tbody>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><strong>代码复用</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>如果A继承B，那么A可复用B中public级别的资源</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><strong>单一，多层的继承</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div>B可以继承C，A可以继承B，<span style="COLOR: red">不存在</span>A继承B又继承C。</div>
            </td>
        </tr>
        <tr style="HEIGHT: 15.75pt">
            <td valign="top" width="150" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #b3b3b3; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 112.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt">
            <div><strong>多态</strong></div>
            </td>
            <td valign="top" width="439" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 329.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: transparent">
            <div align="left">A是父类，B与C是A的子类，如果存在一个方法X，是处理A类的，那么它也能处理B与C类。<span style="COLOR: red">扩展性好，容纳了变化：可以处理，将来因业务需求新建的</span>D类。</div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div>待 续&hellip;&hellip;[提速javascript开发(二)]</div>
          <br/>
          <span style="color:red;">
            <a href="http://zxmlgh.javaeye.com/blog/58691#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 Mar 2007 23:06:17 +0800</pubDate>
        <link>http://zxmlgh.javaeye.com/blog/58691</link>
        <guid>http://zxmlgh.javaeye.com/blog/58691</guid>
      </item>
  </channel>
</rss>