﻿<?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-谁动了我的代码-随笔分类-JavaScript</title><link>http://www.blogjava.net/smcdl/category/22723.html</link><description>抽象即是空，空即是抽象。</description><language>zh-cn</language><lastBuildDate>Mon, 19 Oct 2009 18:36:52 GMT</lastBuildDate><pubDate>Mon, 19 Oct 2009 18:36:52 GMT</pubDate><ttl>60</ttl><item><title>关于样式表对象style与currentStyle的区别</title><link>http://www.blogjava.net/smcdl/archive/2009/10/18/298782.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Sun, 18 Oct 2009 14:59:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/10/18/298782.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/298782.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/10/18/298782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/298782.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/298782.html</trackback:ping><description><![CDATA[style和currentStyle都能用来取得当前样式表中的信息，但是style只能取得在HTML中用style声明的样式表信息，无法取得通过class声明的样式表信息，而currentStyle两种声明方式都可以取得。
<img src ="http://www.blogjava.net/smcdl/aggbug/298782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-10-18 22:59 <a href="http://www.blogjava.net/smcdl/archive/2009/10/18/298782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JavaScript的cloneNode方法对于节点上的事件clone问题的研究。</title><link>http://www.blogjava.net/smcdl/archive/2009/10/18/298743.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Sun, 18 Oct 2009 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/10/18/298743.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/298743.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/10/18/298743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/298743.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/298743.html</trackback:ping><description><![CDATA[<p>我的测试环境是IE8，对于事件clone要注意一下3点：<br />
1.运行时添加的事件不会被克隆，如下例：</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById('a');&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">假设a是一个div</span><span style="color: #008000"><br />
</span><span style="color: #008080">2&nbsp;&nbsp; </span><span style="color: #000000">a.onclick&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_70_95_Open_Text"><span style="color: #000000">{&nbsp;alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">.innerHTML);&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.cloneNode();</span></div>
<br />
2.解析HTML时原来带的事件会被克隆，如下例：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">div&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">'a'&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">'alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">.innerHTML)'</span><span style="color: #000000">&gt;</span><span style="color: #000000">aaaa</span><span style="color: #000000">&lt;/</span><span style="color: #000000">div</span><span style="color: #000000">&gt;</span></div>
<br />
3.通过attachEvent添加的事件会被克隆，如下例：<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById('a');<br />
</span><span style="color: #008080">2&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">a.attachEvent('onclick',&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_71_96_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">alert(</span><span style="color: #0000ff">this</span><span style="color: #000000">.innerHTML);<br />
</span><span style="color: #008080">4&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">}</span></span><span style="color: #000000">);<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.cloneNode();</span></div>
<br />
最后如果想在clone时将节点其中的子节点一同clone的话，请使用cloneNode(true)。
<img src ="http://www.blogjava.net/smcdl/aggbug/298743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-10-18 13:28 <a href="http://www.blogjava.net/smcdl/archive/2009/10/18/298743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>参考Prototype的Class.create写了一个类似的实现，但是不是Ruby like OOP，使用上更像Java。</title><link>http://www.blogjava.net/smcdl/archive/2009/06/09/280773.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Mon, 08 Jun 2009 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/06/09/280773.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/280773.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/06/09/280773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/280773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/280773.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">实现代码：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;$A&nbsp;(Arguments)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;result&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;[];<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;Arguments.length;&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.push(Arguments[i]);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;result;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">}<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">Class&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;create&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;args&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;$A(arguments);<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;parentClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;args.shift();<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;properties;<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(parentClass&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Function)<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;args.shift();<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(parentClass&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Object)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;parentClass;<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">20</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">21</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.initialize)&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.initialize.apply(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">,&nbsp;arguments);<br />
</span><span style="color: rgb(0, 128, 128);">22</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />
</span><span style="color: rgb(0, 128, 128);">23</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">24</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(parentClass)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">25</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;tmpClass&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Function;<br />
</span><span style="color: rgb(0, 128, 128);">26</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpClass.prototype&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;parentClass.prototype;<br />
</span><span style="color: rgb(0, 128, 128);">27</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;klazz.prototype&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;tmpClass();<br />
</span><span style="color: rgb(0, 128, 128);">28</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;klazz.prototype.constructor&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz;<br />
</span><span style="color: rgb(0, 128, 128);">29</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">30</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">31</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;key&nbsp;</span><span style="color: rgb(0, 0, 255);">in</span><span style="color: rgb(0, 0, 0);">&nbsp;properties)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">32</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(properties[key]&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Function&nbsp;</span><span style="color: rgb(0, 0, 0);">&amp;&amp;</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz.prototype[key]&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Function)&nbsp;{<br />
</span><strong><span style="color: rgb(0, 128, 128);">33</span>&nbsp;</strong><span style="color: rgb(0, 0, 0);"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong>klazz.prototype[key]&nbsp;</strong></span><strong><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">34</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_parent&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz.prototype[key];<br />
</span><span style="color: rgb(0, 128, 128);">35</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_method&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;properties[key];<br />
</span><span style="color: rgb(0, 128, 128);">36</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">37</span>&nbsp;<span style="color: rgb(0, 0, 0);">&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><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_this&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">38</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$super&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(){<br />
</span><span style="color: rgb(0, 128, 128);">39</span>&nbsp;<span style="color: rgb(0, 0, 0);">&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;_parent.apply(_this,&nbsp;arguments);<br />
</span><span style="color: rgb(0, 128, 128);">40</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">41</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_method.apply(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">,&nbsp;arguments);<br />
</span><span style="color: rgb(0, 128, 128);">42</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">43</span>&nbsp;</strong><span style="color: rgb(0, 0, 0);"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})();</strong><br />
</span><span style="color: rgb(0, 128, 128);">44</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">45</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">46</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;klazz.prototype[key]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;properties[key];<br />
</span><span style="color: rgb(0, 128, 128);">47</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">48</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">49</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz;<br />
</span><span style="color: rgb(0, 128, 128);">50</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">51</span>&nbsp;<span style="color: rgb(0, 0, 0);">}</span></div>
<br />
测试代码：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">&nbsp;1</span> <span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Class.create({<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialize&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;(tt,mm)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">initialize&nbsp;T<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.tt&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;tt;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.mm&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;mm;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">f</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">123</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Class.create(T,&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialize&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;(tt,mm,nn)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$super(tt,mm);<br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">initialize&nbsp;M<img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">20</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.nn&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;nn;<br />
</span><span style="color: rgb(0, 128, 128);">21</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: rgb(0, 128, 128);">22</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">23</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(102, 255, 32);"><span style="color: rgb(0, 255, 15);"><span style="color: rgb(27, 216, 0);">//$super();&nbsp; 这里也可以不调用父类的f方法</span></span></span><br />
</span><span style="color: rgb(0, 128, 128);">24</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">456</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">25</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
</span><span style="color: rgb(0, 128, 128);">26</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">27</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">sssss</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">28</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">29</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: rgb(0, 128, 128);">30</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">31</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Class.create(M);<br />
</span><span style="color: rgb(0, 128, 128);">32</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">33</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;N(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">34</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.f();<br />
</span><span style="color: rgb(0, 128, 128);">35</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.l();<br />
</span><span style="color: rgb(0, 128, 128);">36</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.s();<br />
</span><span style="color: rgb(0, 128, 128);">37</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m.tt);<br />
</span><span style="color: rgb(0, 128, 128);">38</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m.mm);<br />
</span><span style="color: rgb(0, 128, 128);">39</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m.nn);<br />
</span><span style="color: rgb(0, 128, 128);">40</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;N);<br />
</span><span style="color: rgb(0, 128, 128);">41</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;M);<br />
</span><span style="color: rgb(0, 128, 128);">42</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(m&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;T);</span><span style="color: rgb(0, 128, 128);"><br />
</span></div>
<br />
在做的过程中，上面粗体部分不是像现在这样实现的，遇到了一个怪异的问题，下面给出原来的实现：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">1</span>&nbsp;<span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_parent&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;klazz.prototype[key];<br />
</span><span style="color: rgb(0, 128, 128);">2</span> <span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_method&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;properties[key];<br />
</span><span style="color: rgb(0, 128, 128);">3</span> <span style="color: rgb(0, 0, 0);">klazz.prototype[key]&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;_this&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; $super&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(){<br />
</span><span style="color: rgb(0, 128, 128);">6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _parent.apply(_this,&nbsp;arguments);<br />
</span><span style="color: rgb(0, 128, 128);">7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; }<br />
</span><span style="color: rgb(0, 128, 128);">8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; _method.apply(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">,&nbsp;arguments);<br />
</span><span style="color: rgb(0, 128, 128);">9</span> <span style="color: rgb(0, 0, 0);">}</span></div>
这种实现造成了klazz的prototype中的每个方法执行总是返回相同结果，原因是_parent和_method在create一个Class的
时候已经被固定到properties的最后一个key上，所以在运行的时候会返回相同的结果，解决方法如同上面粗体部分，必须用一个函数封装并立即执行
返回内部函数，这是闭包的一种使用方式，这种做法类似把函数内的内容做一个快照，返回的内部函数存取变量的时候其实是从快照中取得，而不是从
properties中取得。<br />
<br />
这个版本并不能用在生产环境中，由于时间仓促，肯定会有BUG或不完善的地方。所以建议大家还是使用Prototype的实现，我这个实现只是用来更加深刻的理解一些概念，比如变量作用域链、闭包等等的使用。<br />
<br />
</span>
<img src ="http://www.blogjava.net/smcdl/aggbug/280773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-06-09 00:04 <a href="http://www.blogjava.net/smcdl/archive/2009/06/09/280773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对JavaScript的变量作用域的理解</title><link>http://www.blogjava.net/smcdl/archive/2009/05/19/271421.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Mon, 18 May 2009 18:06:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/05/19/271421.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/271421.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/05/19/271421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/271421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/271421.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;">
<p>作用域是一个抽象概念，在浏览器的JavaScript实现中会有这个概念，但是不同浏览器实现可能不同。<br />
<br />
一、作用域的种类（自己感悟）<br />
1.对象作用域，window及标签元素都属于对象作用域。<br />
2.函数作用域，函数自身形成的作用域。<br />
可以把作用域看作是上下文（context）之类的对象。<br />
<br />
看下面的代码<br />
例0</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff;">breakE</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;state&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">1</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;3</span><span style="color: #008000;"><img id="Codehighlighter1_69_245_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_245_Open_Text.style.display='none'; Codehighlighter1_69_245_Closed_Image.style.display='inline'; Codehighlighter1_69_245_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img style="display: none;" id="Codehighlighter1_69_245_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_69_245_Closed_Text.style.display='none'; Codehighlighter1_69_245_Open_Image.style.display='inline'; Codehighlighter1_69_245_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000;">Person&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(name)&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_69_245_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_69_245_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">2</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;age&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">20</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;name;<br />
</span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_147_229_Open_Image" onclick="this.style.display='none'; Codehighlighter1_147_229_Open_Text.style.display='none'; Codehighlighter1_147_229_Closed_Image.style.display='inline'; Codehighlighter1_147_229_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img style="display: none;" id="Codehighlighter1_147_229_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_147_229_Closed_Text.style.display='none'; Codehighlighter1_147_229_Open_Image.style.display='inline'; Codehighlighter1_147_229_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.show&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;()&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_147_229_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_147_229_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">3</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;7</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(age);<br />
</span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(state);<br />
</span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.name);<br />
</span><span style="color: #008080;">10</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;alert(m);<br />
</span><span style="color: #008080;">12</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">13&nbsp;&nbsp;&nbsp; Person.prototype.check = function () {};</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Person('mike');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">4</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">15</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />var </span><span style="color: #000000;">j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Person('Jerry');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">5</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">16</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />m.show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">6</span></div>
通过看上面这段代码我们发现有时候定义变量时用var，有时候却不用，这里有什么区别吗？在此之前我们先定下规矩，那就是必须有一个全局作用域，就像是window对象的存在一样，是作用域的最顶层。那么哪些变量被定义到作用域的最顶层呢？那就是state，对于不在任何函数或类中用var定义的变量存在于全局作用域中。那么全局作用域属于作用域的哪种类型呢？那就是对象作用域。具体是哪个对象的作用域呢？非window对象莫属。<br />
<br />
我们可以把对象作用域想像成两部分，左面部分是对象级别的，保存的是和对象绑定的成员属性（无论是变量还是函数），通过this来访问的。右面的部分是作用域级别的，保存的是var定义的属性（无论是变量还是函数），可以直接通过变量名称访问。对于window来说它是个特殊体，从用var定义的变量可以用this来访问就能看出问题，我个人猜测window对象既是JavaScript的顶层对象又是顶层作用域，所以才会有这种效果。<br />
另一种情况就是标签元素的对象作用域和全局作用域非常的像，如下例：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000;">//</span><span style="color: #008000;">例1</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'button'&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">'click&nbsp;me'&nbsp;onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">'alert(value)'</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000;">//</span><span style="color: #008000;">例2</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;4</span><span style="color: #008000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'button'&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">'click&nbsp;me'&nbsp;onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">'alert(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.value)'</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000;">//</span><span style="color: #008000;">例3</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;6</span><span style="color: #008000;"><img id="Codehighlighter1_162_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_162_205_Open_Text.style.display='none'; Codehighlighter1_162_205_Closed_Image.style.display='inline'; Codehighlighter1_162_205_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img style="display: none;" id="Codehighlighter1_162_205_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_162_205_Closed_Text.style.display='none'; Codehighlighter1_162_205_Open_Image.style.display='inline'; Codehighlighter1_162_205_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;test()&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_162_205_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_162_205_Open_Text"><span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;alert(value);<br />
</span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.value);<br />
</span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">'button'&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">'click&nbsp;me'&nbsp;onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">'test()'</span><span style="color: #000000;">/&gt;</span></div>
很奇怪为什么例1和例2访问value和全局作用域里的var定义的变量的行为是一致的，按理说value应该属于input标签元素对象的成员属性，访问对象的成员属性应该用this来访问，我们自定义的类，如果成员方法想访问成员变量都需要加this的，就像最上面的例子里的this.show方法访问this.name成员变量一样。而对于例3，勤快的读者如果运行一下便知一定会出错的，第一句系统会报value未定义（除非你在全局作用域定义过value变量），第二句会打印出undefined。为什么会这样呢？这就要引出作用域链这个概念了，后面会解释这个概念的。<br />
<br />
反观函数作用域，由于函数中用var定义的变量不能用this来访问，所以在函数作用域中不再像对象作用域那样分两部分，而this实际保存的是与该函数绑定的对象的引用，也就是说this在函数中有特殊的含义，是不能挪作它用的。<br />
<br />
二、作用域链<br />
作用域是可以嵌套的，而嵌套的结果就形成了作用域链，如例0所示，我们来描述一下作用域链：<br />
全局作用域&lt;----Person函数作用域&lt;-----show函数作用域<br />
在全局作用域中可以访问哪些变量呢（注意我现在指的只是作用域中的变量）？<br />
1.state<br />
2.j<br />
在Person函数作用域中可以访问哪些变量呢？<br />
1.全局作用域中的所有可访问的变量<br />
2.name（参数）<br />
3.age<br />
在show函数中又有哪些变量可以被访问呢？<br />
1.全局作用域中的所有可访问变量<br />
2.Person函数作用域中所有可访问变量<br />
3.如若show函数中还定义了var变量也要加入show函数作用域<br />
<br />
如果在show中访问一个x变量，首先从show函数作用域里查是否有x这个变量，如果没有再查Person作用域，如果还没有的话再查全局作用域，找到就返回该变量。<br />
讲解到这里我们发现一个问题，似乎作用域是定义时生成块级作用域（即单独的对象作用域和函数作用域）而运行时生成作用域链，这就是词法作用域的由来。有了这种作用域就构成了闭包的基础。<br />
下面是一个稍微特殊的例子：<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;test()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;test2();<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;test3()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;test2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">"</span><span style="color: #000000;">test2</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;test();<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">}</span></div>
<span style="font-size: 10pt;">定义test的时候test2还不存在，但是调用test的时候，test2就存在了，这说明了作用域链确实是运行时生成的。</span><br />
<br />
<span style="font-size: 10pt;">
通过作用域链如何解释例1、2、3呢？<br />
我的分析是对于HTML元素来说当页面解析的时候，元素被解析成DOM树，HTML元素里的标准属性作为该元素对象作用域的变量（类似var定义的那种），而非该元素DOM对象的成员属性（类似this定义的那种），这样就解释了两个问题：<br />
1.在页面上预定义的HTML元素标准属性是不能用delete和removeAttribute删除的。<br />
2.onclick属于input元素的一个方法，那么这个作用域链应该像下面这样：<br />
&nbsp;&nbsp; 全局作用域&lt;-----HTML元素作用域&lt;-------onclick函数作用域<br />
&nbsp;&nbsp;&nbsp;value变量在哪个作用域里呢？答案是HTML元素作用域中。所以onclick不但可以访问而且加不加this都可以。<br />
那么例3的作用域链是什么样的呢？如下：<br />
&nbsp;&nbsp;&nbsp; 全局作用域&lt;-----test函数作用域<br />
&nbsp;&nbsp;&nbsp; 全局作用域&lt;-----HTML元素作用域&lt;-------onclick函数作用域<br />
没错是两条，因为当单击按钮后执行到onclick函数中时走的是第二条链，而在onclick中调用了test函数时，走的是第一条链。<br />
显然value还是定义在HTML元素作用域中，而test想访问value值一定是访问不到的。<br />
<br />
对于这个问题我还测试了一下非标准属性，如下例：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">&lt;</span><span style="color: #000000;">input&nbsp;type</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">button</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">click&nbsp;me</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;bb</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">123</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;onclick</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">delete&nbsp;this.bb;&nbsp;alert(bb)</span><span style="color: #000000;">"</span><span style="color: #000000;">/&gt;</span></div>
测试发现非标准的HTML元素属性可以被删除，但是delete语句执行时必须用this来引用（IE中测试），直接访问如alert到没有这个限制。<br />
说明bb是input对象属性是没错的，因为它可以被删除，但是如果它没有被删除的话alert(bb)还是能显示出来的，说明这类属性很特殊，具体怎么解释我还没有想好，如果有朋友能解释的通，请告知我。<br />
<br />
三、什么是闭包<br />
show函数显然是一个闭包，但是它是由类的构造函数生成的，和另一种形式其实是一样的，代码如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><span style="color: #008080;">&nbsp;1</span><img id="Codehighlighter1_24_80_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_80_Open_Text.style.display='none'; Codehighlighter1_24_80_Closed_Image.style.display='inline'; Codehighlighter1_24_80_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img style="display: none;" id="Codehighlighter1_24_80_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_24_80_Closed_Text.style.display='none'; Codehighlighter1_24_80_Open_Image.style.display='inline'; Codehighlighter1_24_80_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;getFunc&nbsp;(a,&nbsp;b)&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_24_80_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_24_80_Open_Text"><span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_49_78_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_78_Open_Text.style.display='none'; Codehighlighter1_49_78_Closed_Image.style.display='inline'; Codehighlighter1_49_78_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img style="display: none;" id="Codehighlighter1_49_78_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_49_78_Closed_Text.style.display='none'; Codehighlighter1_49_78_Open_Image.style.display='inline'; Codehighlighter1_49_78_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;()&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_49_78_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_49_78_Open_Text"><span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(a&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;b);<br />
</span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000;">&nbsp;<br />
</span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;func1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getFunc(</span><span style="color: #000000;">10</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />func1();<br />
</span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080;">10</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;func2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;getFunc(</span><span style="color: #000000;">20</span><span style="color: #000000;">,</span><span style="color: #000000;">30</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">11</span><span style="color: #000000;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />func2();</span></div>
上面的代码func1函数无论我执行多少次都显示5，func2函数无论我执行多少次都显示-10，这和例0是多么的像呀，例0中m.show()无论执行多少次都能显示'mike'，j.show()无论执行多少次都能显示'Jerry'（行号9那行在起作用，先不考虑this.name那行）。这就是闭包，把作用域链中变化的变量给固定化，然后把作用域链和函数本身进行绑定，无论我在什么地方执行函数，函数的作用域链始终是它定义的时候那条。<br />
<br />
四、关于对象成员的访问（即this能引用的那些属性），我只是在猜想，可能的作用域链应该如下：<br />
&nbsp;&nbsp;&nbsp; 全局作用域&lt;-------m对象作用域&lt;-------m.test函数作用域<br />
&nbsp;&nbsp;&nbsp; m的对象成员（类中this定义的）保存在对象作用域的左半部，m的作用域变量（类中var定义的）保存在对象作用域的右半部。<br />
&nbsp;&nbsp;&nbsp; m.test函数要访问对象成员时从对象作用域的左半部检索，要访问作用域变量时从对象作用域的右半部检索。<br />
&nbsp;&nbsp;&nbsp; 同时这个作用域链还解答了另一个问题，即原型方法（公共方法）为什么不能访问类中用var定义的变量。<br />
&nbsp;&nbsp;&nbsp; 看例0即可知check和Person根本就不在同一个链上，又谈何能访问呢？<br />
<br />
至此把JavaScript变量作用域讲解完毕，我觉得这个还是蛮重要的，如果一定要有个比较的话，应该和Java中的ClassLoader有同样的重要性吧。大家借鉴的同时请多给我指出错误，因为这其中有一些还是我的猜测。
</span>
<img src ="http://www.blogjava.net/smcdl/aggbug/271421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-05-19 02:06 <a href="http://www.blogjava.net/smcdl/archive/2009/05/19/271421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE document compatMode</title><link>http://www.blogjava.net/smcdl/archive/2009/04/15/265802.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 15 Apr 2009 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/04/15/265802.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/265802.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/04/15/265802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/265802.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/265802.html</trackback:ping><description><![CDATA[<div class="title">compatMode Property</div>
<!--content type: SDKML. Transform: webcollection2mtps.xslt.-->
<div class="clsDocBody">
<p class="CCE_Message"><!----></p>
<p>Gets a value that indicates whether standards-compliant mode is switched on for the <span>object</span>.</p>
<p class="input"><strong>Syntax</strong></p>
<blockquote><strong></strong>&nbsp;[ <span class="clsRange">sMode</span><strong> =</strong> ] <em><span class="moreinfo" title="an element from the Applies To list below">object</span></em>.<strong>compatMode</strong></blockquote>
<p class="input"><strong>Possible Values</strong></p>
<blockquote>
<table class="clsStd">
    <tbody>
        <tr>
            <td><span class="clsRange">sMode</span></td>
            <td><strong>String</strong> that receives one of the following values.
            <div class="mtps-table clsStd">
            <div class="mtps-row"><span class="mtps-cell"><code>BackCompat</code></span><span class="mtps-cell">Standards-compliant mode is not switched on.</span></div>
            <div class="mtps-row"><span class="mtps-cell"><code>CSS1Compat</code></span><span class="mtps-cell">Standards-compliant mode is switched on.</span></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<p>The property is read-only. The property has no default value.</p>
</blockquote>
<p class="input"><strong>Remarks</strong></p>
<blockquote>
<p>With Microsoft Internet Explorer 6 and later, you switch on standards-compliant mode by including the <a id="ctl00_rs1_mainContentContainer_ctl03" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl03',this);" href="http://msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx">!DOCTYPE</a> declaration at the top of your document, specifying a valid <strong>Label</strong> in the declaration, and in some cases, specifying the <strong>Definition</strong> or <strong>URL</strong>. The <strong>Label</strong> element specifies the unique name of the Document Type Definition (DTD), and can be appended with the version number of the DTD. The <strong>Definition</strong> element specifies the definition of the DTD that is specified in the <strong>Label</strong>. The <strong>URL</strong> element specifies the location of the DTD.</p>
<p>When standards-compliant mode is switched on (also called "strict mode"), Windows Internet Explorer displays the document according to the World Wide Web Consortium (W3C)&nbsp;<a id="ctl00_rs1_mainContentContainer_ctl04" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl04',this);" href="http://www.w3.org/style/css/" target="_top">Cascading Style Sheets (CSS)</a>&nbsp;<!--src=[../../../../graphics/leave-site.gif]--><img alt="World Wide Web link" src="http://i.msdn.microsoft.com/ms533687.leave-site(en-us,VS.85).gif" /> standard. When standards-compliant mode is not switched on (also called "quirks mode"), the document is displayed as it was displayed in previous versions of Internet Explorer.</p>
<p>&nbsp;<!--src=[../../../../graphics/new.gif]--><img alt="New for Internet Explorer 8" src="http://i.msdn.microsoft.com/ms533687.new(en-us,VS.85).gif" />&nbsp;The <strong>compatMode</strong> property is deprecated in Internet Explorer 8 in favor of the <a id="ctl00_rs1_mainContentContainer_ctl07" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl07',this);" href="http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx">documentMode</a> property. </p>
</blockquote><br />
<br />
<br />
<p class="input"><strong>IE8 documentMode <br />
<br />
Syntax</strong></p>
<blockquote>
<pre style="word-wrap: break-word; word-break: break-all" id="ctl00_rs1_mainContentContainer_ctl02" class="libCScode" space="preserve"><strong>[ <span class="clsRange">vMode</span><strong> =</strong> ] <em><span class="moreinfo" title="an element from the Applies To list below">object</span></em>.<strong>documentMode</strong></strong></pre>
</blockquote>
<p class="input"><strong>Possible Values</strong></p>
<blockquote>
<table class="clsStd">
    <tbody>
        <tr>
            <td><span class="clsRange">vMode</span></td>
            <td><strong>Floating-point</strong> that receives one of the following values.
            <div class="mtps-table clsStd">
            <div class="mtps-row"><span class="mtps-cell"><code>5</code></span><span class="mtps-cell">Microsoft Internet Explorer 5 mode (also known as "quirks mode").</span></div>
            <div class="mtps-row"><span class="mtps-cell"><code>7</code></span><span class="mtps-cell">Internet Explorer 7 Standards mode.</span></div>
            <div class="mtps-row"><span class="mtps-cell"><code>8</code></span><span class="mtps-cell">Internet Explorer 8 Standards mode.</span></div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<p>The property is read-only. The property has no default value.</p>
</blockquote>
<p class="input"><strong>Remarks</strong></p>
<blockquote>
<p>This property is available in all compatibility modes. </p>
<p>The document compatibility mode of a Web page determines how Internet Explorer 8 interprets and renders the page. Page authors generally use <a id="ctl00_rs1_mainContentContainer_ctl04" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl04',this);" href="http://msdn.microsoft.com/en-us/library/ms535853(VS.85).aspx">meta</a> elements to specify <code>X-UA-Compatible</code>&nbsp;<a id="ctl00_rs1_mainContentContainer_ctl05" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl05',this);" href="http://msdn.microsoft.com/en-us/library/ms533876(VS.85).aspx">HTTP-EQUIV</a> headers that specify the document compatibility mode. For more information, see <a id="ctl00_rs1_mainContentContainer_ctl06" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl06',this);" href="http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx">Defining Document Compatibility</a>. In versions of Internet Explorer previous to Internet Explorer 8, <a id="ctl00_rs1_mainContentContainer_ctl07" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl07',this);" href="http://msdn.microsoft.com/en-us/library/ms533687(VS.85).aspx">compatMode</a> was solely determined by <a id="ctl00_rs1_mainContentContainer_ctl08" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl08',this);" href="http://msdn.microsoft.com/en-us/library/ms533737(VS.85).aspx">DOCTYPE</a>. </p>
</blockquote></div>
<img src ="http://www.blogjava.net/smcdl/aggbug/265802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-04-15 17:37 <a href="http://www.blogjava.net/smcdl/archive/2009/04/15/265802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript对form及form中的引用。</title><link>http://www.blogjava.net/smcdl/archive/2009/03/19/260892.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Thu, 19 Mar 2009 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/03/19/260892.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/260892.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/03/19/260892.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/260892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/260892.html</trackback:ping><description><![CDATA[通常我们对form的引用通过给form加上id来实现，其实我们可以使用name来实现。两者的不同是id需要用document.getElementById()来检索，name通过document.forms[form_name]来检索，在form中的表单元素都有name的时候可以通过document.forms[form_name][element_name]来检索到指定的表单元素。另一种方法可以通过document.forms[form_name].elements来获得表单元素的集合，但是其中不包括input type='image'，所有这些方法在IE7、Opera、FF2、FF3、Chrome、Safari上测试通过。<br />
<br />
<img src ="http://www.blogjava.net/smcdl/aggbug/260892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-03-19 20:44 <a href="http://www.blogjava.net/smcdl/archive/2009/03/19/260892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript注意事项（不定期更新）</title><link>http://www.blogjava.net/smcdl/archive/2009/01/19/251838.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Mon, 19 Jan 2009 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2009/01/19/251838.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/251838.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2009/01/19/251838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/251838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/251838.html</trackback:ping><description><![CDATA[<strong>&nbsp;&nbsp; 本贴将不定期更新，将集合JavaScript使用中常见的问题。</strong><br />
&nbsp; <strong>约定：浏览器名称IE/FF(通指Windows平台上的IE、FF)、IE5.5+/FF2+(后面的数字表示版本，甚至可以有更详细的版本信息）<br />
&nbsp; 目前只测试IE和FF，其他浏览器不在测试范围内，如果我只提及IE的，则说明在IE中有问题，而在FF中没有问题。<br />
</strong>
<ol>
    <li>IE中Class不能跨窗口引用，即在父窗口定义的SomeClass不能在子窗口中实例化,如<strong><span style="color: #ff0000">new opener.SomeClass()</span></strong><span style="color: #ff0000"><span style="color: #000000"><span style="color: #ff0000"><span style="color: #000000">。请注意在这里我没有提到frame的情况，因为我还没有时间测试，如果哪位有时间测试请告诉我结果。</span></span></span></span><br />
    <li>IE中delete操作只能删除JavaScript或自定义对象的属性，而不能删除HTML Element对象的属性，如果想删除Element的属性，请使用<strong><span style="color: #ff0000">removeAttribute()</span></strong>方法。
    <li>IE中delete操作只能删除非var定义的变量。&nbsp;
    <li>IE中如果在一个窗口引用一个对象，如果这个对象是在其他窗口建立的，但是那个窗口已经关闭了，那么对这个对象的引用将会出错。 </li>
</ol>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如在窗口A中<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; opener.someClassObj = new SomeClass();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; window.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 窗口B中<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; typeof someClassObj 结果是 'object'， 但是实际引用该对象却会出错。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <br />
<br />
<img src ="http://www.blogjava.net/smcdl/aggbug/251838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2009-01-19 10:42 <a href="http://www.blogjava.net/smcdl/archive/2009/01/19/251838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在定义一个js类的时候，为什么要设置该类的prototype属性为它所要继承的类的实例对象</title><link>http://www.blogjava.net/smcdl/archive/2008/12/05/244594.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Fri, 05 Dec 2008 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2008/12/05/244594.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/244594.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2008/12/05/244594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/244594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/244594.html</trackback:ping><description><![CDATA[在些JavaScript类定义的时候，大家很可能都写过下面的代码：<br />
function A() {}<br />
function B() {}<br />
B.prototype = new A()<br />
<br />
上面这样写是为了让instanceof语句能起作用。举个例子：<br />
1.不重写子类的prototype属性<br />
b = new B();<br />
b instanceof B&nbsp; //return true<br />
b instanceof A // <span style="color: red;"><strong>return false</strong></span><strong></strong><br />
b instanceof Object //return true<br />
<br />
2.写子类的prototype属性<br />
b = new B();<br />
b instanceof B //return true<br />
b instanceof A //<strong><span style="color: red;">return true</span></strong><br />
b instanceof Object //return true<br />
<br />
另外，prototype的作用是可以用来模拟继承，使我们在父类里添加的属性方法在子类里能访问。<br />
但是我们可以使用一种其他的方法来变通。<br />
<br />
function A(x) {<br />
&nbsp;&nbsp;&nbsp; this.x = x;<br />
&nbsp;&nbsp;&nbsp; this.method1 = functioni () {};<br />
}<br />
<br />
function B(x,y) {<br />
&nbsp;&nbsp;&nbsp; <span style="color: red;"><strong>A.call(this,x);</strong></span><strong></strong><br />
&nbsp;&nbsp;&nbsp; this.y = y;<br />
}<br />
<br />
b&nbsp; =&nbsp; new B(1, 2)<br />
<br />
这时b中绝对有x，并且x 等于1，但是我们为什么还要使用prototype呢？<br />
主要是为了向父类原型动态添加的属性和方法可以出现在子类的实例对象中。<br />
接着上面的例子<br />
<br />
A.prototype.z = function () {}<br />
<br />
如果我们没有设置B.prototype = new A()，则b不会动态添加方法z 。<br />
<br />
<img src ="http://www.blogjava.net/smcdl/aggbug/244594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2008-12-05 14:24 <a href="http://www.blogjava.net/smcdl/archive/2008/12/05/244594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 类型转换注意事项</title><link>http://www.blogjava.net/smcdl/archive/2008/11/14/240447.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Fri, 14 Nov 2008 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2008/11/14/240447.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/240447.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2008/11/14/240447.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/240447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/240447.html</trackback:ping><description><![CDATA[注：部分摘自《<strong>JavaScript: The Definitive Guide, 5th Edition</strong>》<br />
<br />
字符型转换为数值型可以使用下列方法<br />
parseInt(stringVar);&nbsp;&nbsp;&nbsp;&nbsp; //parseInt还可以指定二进制、八进制、或16进制<br />
parseFloat(stringVar);<br />
Number(stringVar);<br />
<br />
for example:<br />
parseInt("ff")&nbsp;&nbsp;&nbsp; //will throw a error<br />
parseInt("ff", 16) == parseInt("0xff")&nbsp;&nbsp;&nbsp;&nbsp; // return 255<br />
parseInt("77")&nbsp;&nbsp;&nbsp; //return 77<br />
parseInt("077") == parseInt("77", 8)&nbsp;&nbsp;&nbsp; // return 63<br />
<strong><span style="color: red;">注：加"0"或"0x"前缀会自动检测并转换为相应的数制所表示的值<br />
</span><span style="color: red;">If <tt>parseInt( )</tt> or <tt>parseFloat( )</tt> cannot convert the specified
string to a number, it returns <tt>NaN</tt></span><tt></tt></strong><br />
<br />
数值型转换为字符型<br />
numberVar + "";<br />
numberVar.toString();&nbsp;&nbsp; //可以指定二进制、八进制、或16进制<br />
String(numberVar);<br />
<br />
<strong><span style="color: red;">other useful method<br />
</span></strong>var n = 123456.789;
<br />
n.toFixed(0);         // "123457"
<br />
n.toFixed(2);         // "123456.79"
<br />
n.toExponential(1);   // "1.2e+5"
<br />
n.toExponential(3);   // "1.235e+5"
<br />
n.toPrecision(4);     // "1.235e+5"
<br />
n.toPrecision(7);     // "123456.8"
<br />
<br />
其实还有一种方法就是使用new操作符，如<br />
new String(numberVar);<br />
new Numer(stringVar);<br />
但是这种方法返回的结果是object类型，而不是原始数据类型，大家可以酌情使用。<br />
<br />
另外，在相等判断时使用' == '会自动转型（具体转换情况请参考其他资料），如果想精确判断请使用' === '。<br />
如&nbsp;&nbsp; 1 == '1'&nbsp;&nbsp;&nbsp; //return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 === '1' //return false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 == new Number(1)&nbsp;&nbsp; //return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 === new Number(1)&nbsp;&nbsp; //return false<br />
<br />
数值连接等相关操作<br />
"21" + "2" == "21" + 2&nbsp; //return 212<br />
2 + "21"&nbsp;&nbsp; //return 221<br />
"21" * "2" == "21" * 2 == 2 * "21"&nbsp; //return 42<br />
"21" / "3" == "21" / 3 == 21 / "3"&nbsp; //return 7<br />
"21" - "2" == "21" - 2&nbsp; == 21 - "2" == 21 - " &nbsp;&nbsp; 2 &nbsp;&nbsp; "&nbsp; //return 19<br />
<br />
正如和Java中一样，new Number(3) == new Number(3)返回false，同理推广到其他类型，new操作符总是建立一个新对象，<br />
而==只是比较其引用，并不比较对象本身，所以两个new的对象的引用总是不同的。所以在通常的逻辑判断中(如if或while等)，<br />
最好避免使用Primitive Datatype Wrapper，而直接使用Primitive Datatype。<br />
<br />
From Wrapper to Primitive, for example:<br />
new Number(3).valueOf()<br />
new String("str").valueOf()<br />
new Date().valueOf()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //convert a Date to millisecond representation<br />
[any other object].valueOf()&nbsp;&nbsp;&nbsp; //The primitive value associated with the <tt><em>object</em></tt>,
if any. If there is no value associated with <tt><em>object</em></tt>, returns the
object itself.
<br />
<br />
<p class="docText"><strong><span style="color: #ff0000;">Finally, note that any number, string, or boolean value can be
converted to its corresponding wrapper object with the <tt>Object( )</tt>
function:</span></strong><br />
</p>
<p class="docText">var number_wrapper = Object(3);</p>
<br />
<br />
<table cellpadding="4" cellspacing="0" frame="hsides" rules="all" width="100%">
    <caption>
    <h5 class="docTableTitle"><span style="font-size: 36pt;"><span style="font-size: 24pt;"><span style="font-size: 18pt;"><span style="font-size: 12pt;">Automatic datatype conversions</span></span></span></span></h5>
    </caption>
    <colgroup span="5">
    <col>
    <col>
    <col>
    <col>
    <col></colgroup>
    <thead>
        <tr>
            <th class="thead" scope="col" align="center">
            <p class="docText">Value</p>
            </th>
            <th class="thead" scope="col" colspan="4" align="center">
            <p class="docText">Context in which value is used</p>
            </th>
        </tr>
        <tr>
            <th class="thead" scope="col" align="left">
            <br />
            </th>
            <th class="thead" scope="col" align="left">
            <p class="docText">String</p>
            </th>
            <th class="thead" scope="col" align="left">
            <p class="docText">Number</p>
            </th>
            <th class="thead" scope="col" align="left">
            <p class="docText">Boolean</p>
            </th>
            <th class="thead" scope="col" align="left">
            <p class="docText">Object</p>
            </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Undefined value</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"undefined"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>NaN</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Error</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>null</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"null"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>0</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Error</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Nonempty string</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Numeric value of string or <tt>NaN</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>TRue</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">String object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Empty string</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>0</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">String object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>0</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"0"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Number object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>NaN</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"NaN"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Number object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Infinity</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"Infinity"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>true</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Number object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Negative infinity</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"-Infinity"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>TRue</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Number object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Any other number</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">String value of number</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>true</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Number object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>true</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"true"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>1</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Boolean object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>false</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>"false"</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>0</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">Boolean object</p>
            </td>
        </tr>
        <tr>
            <td class="docTableCell" align="left">
            <p class="docText">Object</p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>toString( )</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>valueOf( )</tt>, <tt>toString( )</tt>, or
            <tt>NaN</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText"><tt>true</tt></p>
            </td>
            <td class="docTableCell" align="left">
            <p class="docText">As is</p>
            </td>
        </tr>
    </tbody>
</table>
<p class="docText"><br />
</p>
<p class="docText">利用上面的表，我们可以知道if ("") 、if (0)、if (undefined)、if (null)、if (NaN)，这些if语句的条件都为false.<br />
</p>
<br />
<br />
<img src ="http://www.blogjava.net/smcdl/aggbug/240447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2008-11-14 09:32 <a href="http://www.blogjava.net/smcdl/archive/2008/11/14/240447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向对象的JavaScript（二，TSS上的一篇文章，先借鉴一下）</title><link>http://www.blogjava.net/smcdl/archive/2008/09/17/229519.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 17 Sep 2008 12:15:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2008/09/17/229519.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/229519.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2008/09/17/229519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/229519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/229519.html</trackback:ping><description><![CDATA[<p>&nbsp;<a title="Object Oriented JavaScript Demonstrated" href="http://www.theserverside.com/tt/articles/article.tss?track=NL-461&amp;ad=662552&amp;l=OOJavaScriptDemonstrated&amp;asrc=EM_NLN_4467663&amp;uid=2965011">Object Oriented JavaScript Demonstrated</a></p>
<img src ="http://www.blogjava.net/smcdl/aggbug/229519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2008-09-17 20:15 <a href="http://www.blogjava.net/smcdl/archive/2008/09/17/229519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面向对象的JavaScript （一、对象基础，使用函数来模拟类）</title><link>http://www.blogjava.net/smcdl/archive/2008/09/03/226748.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 03 Sep 2008 11:09:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2008/09/03/226748.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/226748.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2008/09/03/226748.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/226748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/226748.html</trackback:ping><description><![CDATA[通过一个例子可以很直观的表述本主题，所以没有任何其他的说明文字，请看代码吧。<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"><span style="color: #008080">&nbsp;&nbsp;1</span><img id="Codehighlighter1_27_798_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_798_Open_Text.style.display='none'; Codehighlighter1_27_798_Closed_Image.style.display='inline'; Codehighlighter1_27_798_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_27_798_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_27_798_Closed_Text.style.display='none'; Codehighlighter1_27_798_Open_Image.style.display='inline'; Codehighlighter1_27_798_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Person(name,&nbsp;age)&nbsp;</span><span id="Codehighlighter1_27_798_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_27_798_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">私有变量(private&nbsp;variables)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;&nbsp;4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;myName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br />
</span><span style="color: #008080">&nbsp;&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;myAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;age;<br />
</span><span style="color: #008080">&nbsp;&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">公共属性(public&nbsp;properties)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;&nbsp;8</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myName;<br />
</span><span style="color: #008080">&nbsp;&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myAge;<br />
</span><span style="color: #008080">&nbsp;10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">私有函数(private&nbsp;functions)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;12</span><span style="color: #008000"><img id="Codehighlighter1_238_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_238_260_Open_Text.style.display='none'; Codehighlighter1_238_260_Closed_Image.style.display='inline'; Codehighlighter1_238_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_238_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_238_260_Closed_Text.style.display='none'; Codehighlighter1_238_260_Open_Image.style.display='inline'; Codehighlighter1_238_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getMyName()&nbsp;</span><span id="Codehighlighter1_238_260_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_238_260_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;myName;<br />
</span><span style="color: #008080">&nbsp;14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;16</span><span style="color: #000000"><img id="Codehighlighter1_288_308_Open_Image" onclick="this.style.display='none'; Codehighlighter1_288_308_Open_Text.style.display='none'; Codehighlighter1_288_308_Closed_Image.style.display='inline'; Codehighlighter1_288_308_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_288_308_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_288_308_Closed_Text.style.display='none'; Codehighlighter1_288_308_Open_Image.style.display='inline'; Codehighlighter1_288_308_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;getName()&nbsp;</span><span id="Codehighlighter1_288_308_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_288_308_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;name;<br />
</span><span style="color: #008080">&nbsp;18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;20</span><span style="color: #000000"><img id="Codehighlighter1_344_365_Open_Image" onclick="this.style.display='none'; Codehighlighter1_344_365_Open_Text.style.display='none'; Codehighlighter1_344_365_Closed_Image.style.display='inline'; Codehighlighter1_344_365_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_344_365_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_344_365_Closed_Text.style.display='none'; Codehighlighter1_344_365_Open_Image.style.display='inline'; Codehighlighter1_344_365_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;getMyAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_344_365_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_344_365_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;myAge;<br />
</span><span style="color: #008080">&nbsp;22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;24</span><span style="color: #000000"><img id="Codehighlighter1_399_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_399_418_Open_Text.style.display='none'; Codehighlighter1_399_418_Closed_Image.style.display='inline'; Codehighlighter1_399_418_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_399_418_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_399_418_Closed_Text.style.display='none'; Codehighlighter1_399_418_Open_Image.style.display='inline'; Codehighlighter1_399_418_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;getAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_399_418_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_399_418_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;age;<br />
</span><span style="color: #008080">&nbsp;26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">特权方法(privileged&nbsp;methods)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;29</span><span style="color: #008000"><img id="Codehighlighter1_485_664_Open_Image" onclick="this.style.display='none'; Codehighlighter1_485_664_Open_Text.style.display='none'; Codehighlighter1_485_664_Closed_Image.style.display='inline'; Codehighlighter1_485_664_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_485_664_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_485_664_Closed_Text.style.display='none'; Codehighlighter1_485_664_Open_Image.style.display='inline'; Codehighlighter1_485_664_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_485_664_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_485_664_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name;<br />
</span><span style="color: #008080">&nbsp;31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;myName;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以访问私有变量</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;32</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以访问构造函数参数(其参数本质也是私有变量)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;33</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;getMyName();&nbsp;&nbsp;可以访问私有函数</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;34</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;getName();&nbsp;&nbsp;&nbsp;&nbsp;可以访问私有函数</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;35</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;37</span><span style="color: #000000"><img id="Codehighlighter1_699_732_Open_Image" onclick="this.style.display='none'; Codehighlighter1_699_732_Open_Text.style.display='none'; Codehighlighter1_699_732_Closed_Image.style.display='inline'; Codehighlighter1_699_732_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_699_732_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_699_732_Closed_Text.style.display='none'; Codehighlighter1_699_732_Open_Image.style.display='inline'; Codehighlighter1_699_732_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_699_732_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_699_732_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;getAge();&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;41</span><span style="color: #000000"><img id="Codehighlighter1_771_795_Open_Image" onclick="this.style.display='none'; Codehighlighter1_771_795_Open_Text.style.display='none'; Codehighlighter1_771_795_Closed_Image.style.display='inline'; Codehighlighter1_771_795_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_771_795_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_771_795_Closed_Text.style.display='none'; Codehighlighter1_771_795_Open_Image.style.display='inline'; Codehighlighter1_771_795_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getRealAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_771_795_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_771_795_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age;<br />
</span><span style="color: #008080">&nbsp;43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">公共方法(public&nbsp;methods)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;47</span><span style="color: #008000"><img id="Codehighlighter1_871_974_Open_Image" onclick="this.style.display='none'; Codehighlighter1_871_974_Open_Text.style.display='none'; Codehighlighter1_871_974_Closed_Image.style.display='inline'; Codehighlighter1_871_974_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_871_974_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_871_974_Closed_Text.style.display='none'; Codehighlighter1_871_974_Open_Image.style.display='inline'; Codehighlighter1_871_974_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.acceptName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;(param)&nbsp;</span><span id="Codehighlighter1_871_974_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_871_974_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;param;<br />
</span><span style="color: #008080">&nbsp;49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">name&nbsp;=&nbsp;param;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公共方法不能访问私有变量</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;50</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">myName&nbsp;=&nbsp;param;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公共方法不能访问私有变量</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;51</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;53</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">原型属性(prototype&nbsp;properties)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;54</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.legs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">静态属性(static&nbsp;properties)</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;57</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//</span><span style="color: #008000">整个类只有一个静态属性，各个对象共享同一个静态属性值</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;58</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">Person.arms&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;60</span><span style="color: #000000"><img id="Codehighlighter1_1137_1211_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1137_1211_Open_Text.style.display='none'; Codehighlighter1_1137_1211_Closed_Image.style.display='inline'; Codehighlighter1_1137_1211_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1137_1211_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1137_1211_Closed_Text.style.display='none'; Codehighlighter1_1137_1211_Open_Image.style.display='inline'; Codehighlighter1_1137_1211_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />Person.getArms&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_1137_1211_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_1137_1211_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Person.arms;<br />
</span><span style="color: #008080">&nbsp;62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">return&nbsp;this.arms;&nbsp;&nbsp;&nbsp;可以使用this来指代Person对象本身</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;63</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;65</span><span style="color: #000000"><img id="Codehighlighter1_1215_1455_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1215_1455_Open_Text.style.display='none'; Codehighlighter1_1215_1455_Closed_Image.style.display='inline'; Codehighlighter1_1215_1455_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1215_1455_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1215_1455_Closed_Text.style.display='none'; Codehighlighter1_1215_1455_Open_Image.style.display='inline'; Codehighlighter1_1215_1455_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_1215_1455_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">/**/</span><span id="Codehighlighter1_1215_1455_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;66</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />Person是一个逻辑上的类，他的本质是一个Function，在JavaScript中类是由Function来模拟的，所以Person还是一个Function的实例。而arms和getArms方法是一个Function对象实例上的属性和方法，是Person对象所特有的，所以本例可以使用Person.arms来引用，同时在getArms方法中，可以使用this.arms来引用，因为getArms是Person对象上的方法，在该方法内部this指代Person对象自身。<br />
</span><span style="color: #008080">&nbsp;67</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;68</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(Person.getArms());<br />
</span><span style="color: #008080">&nbsp;69</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;70</span><span style="color: #000000"><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;pa&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">Teddy</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">25</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;71</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;72</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">alert(pa.myName);&nbsp;&nbsp;不能访问私有变量</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;73</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;74</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pa.name);<br />
</span><span style="color: #008080">&nbsp;75</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;76</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pa.getAge());<br />
</span><span style="color: #008080">&nbsp;77</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;78</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />pa.acceptName(</span><span style="color: #000000">"</span><span style="color: #000000">Born</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;79</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;80</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pa.getName());<br />
</span><span style="color: #008080">&nbsp;81</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;82</span><span style="color: #000000"><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;pb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Person(</span><span style="color: #000000">"</span><span style="color: #000000">John</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">18</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;83</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;84</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">运行时动态加入方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;85</span><span style="color: #008000"><img id="Codehighlighter1_1725_1749_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1725_1749_Open_Text.style.display='none'; Codehighlighter1_1725_1749_Closed_Image.style.display='inline'; Codehighlighter1_1725_1749_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1725_1749_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1725_1749_Closed_Text.style.display='none'; Codehighlighter1_1725_1749_Open_Image.style.display='inline'; Codehighlighter1_1725_1749_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.acceptAge&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;(param)&nbsp;</span><span id="Codehighlighter1_1725_1749_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_1725_1749_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;86</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;param;<br />
</span><span style="color: #008080">&nbsp;87</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;88</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;89</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">pb对象也可以调用动态添加的方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;90</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">pb.acceptAge(</span><span style="color: #000000">30</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;91</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;92</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pb.getAge());<br />
</span><span style="color: #008080">&nbsp;93</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;94</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pb.getRealAge());<br />
</span><span style="color: #008080">&nbsp;95</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;96</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">运行时覆盖已定义方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;97</span><span style="color: #008000"><img id="Codehighlighter1_1897_1917_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1897_1917_Open_Text.style.display='none'; Codehighlighter1_1897_1917_Closed_Image.style.display='inline'; Codehighlighter1_1897_1917_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1897_1917_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1897_1917_Closed_Text.style.display='none'; Codehighlighter1_1897_1917_Open_Image.style.display='inline'; Codehighlighter1_1897_1917_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.acceptName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;(param)&nbsp;</span><span id="Codehighlighter1_1897_1917_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_1897_1917_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;98</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;param;<br />
</span><span style="color: #008080">&nbsp;99</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">100</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">101</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">所有已创建对象都自动继承被覆盖的方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">102</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">alert(pa.acceptName(</span><span style="color: #000000">"</span><span style="color: #000000">Black</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
</span><span style="color: #008080">103</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">104</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pa.getName());<br />
</span><span style="color: #008080">105</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">106</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />alert(pa.legs);<br />
</span><span style="color: #008080">107</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">108</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">运行时改变原型属性值</span><span style="color: #008000"><br />
</span><span style="color: #008080">109</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.legs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">;<br />
</span><span style="color: #008080">110</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">111</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">所有已创建对象都自动继承被改变的原型属性值</span><span style="color: #008000"><br />
</span><span style="color: #008080">112</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">alert(pb.legs);<br />
</span><span style="color: #008080">113</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">114</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">运行时将原型属性改为公共方法</span><span style="color: #008000"><br />
</span><span style="color: #008080">115</span><span style="color: #008000"><img id="Codehighlighter1_2148_2164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2148_2164_Open_Text.style.display='none'; Codehighlighter1_2148_2164_Closed_Image.style.display='inline'; Codehighlighter1_2148_2164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2148_2164_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2148_2164_Closed_Text.style.display='none'; Codehighlighter1_2148_2164_Open_Image.style.display='inline'; Codehighlighter1_2148_2164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #000000">Person.prototype.legs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;()&nbsp;</span><span id="Codehighlighter1_2148_2164_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_2148_2164_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">116</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">;<br />
</span><span style="color: #008080">117</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">118</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">119</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">所有已创建对象都自动继承原型属性到公共方法的改变</span><span style="color: #008000"><br />
</span><span style="color: #008080">120</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">alert(pa.legs());</span></div>
 <img src ="http://www.blogjava.net/smcdl/aggbug/226748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2008-09-03 19:09 <a href="http://www.blogjava.net/smcdl/archive/2008/09/03/226748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>兼容IE和FF的Javascript动态添加Select控件的Option选项</title><link>http://www.blogjava.net/smcdl/archive/2007/12/30/171771.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Sun, 30 Dec 2007 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2007/12/30/171771.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/171771.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2007/12/30/171771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/171771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/171771.html</trackback:ping><description><![CDATA[看了很多Javascript的书籍，发现对Select可以使用add方法添加Option选项。<br />
selectObj.add(new Option("Label", "Value"));<br />
但是add方法好像只在IE下好用。现在提供一个通用的方法：<br />
selectObj.options[selectObj.length] = new Option("Label", "Value");<br />
另外如果想还想使用add方法，可以写成如下格式：<br />
selectObj.add(new Option("Label", "Value"), null);<br />
请注意，在IE6及IE7下请使用不带null参数的add方法，在FF下请使用带null参数的方法，IE8下带不带都可以。<br />
很奇怪为什么一定要加null，我猜测add方法里一定使用了'=== null'来判断第二的参数或者没有对参数数组的长度做验证。<br />
<img src ="http://www.blogjava.net/smcdl/aggbug/171771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2007-12-30 22:49 <a href="http://www.blogjava.net/smcdl/archive/2007/12/30/171771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于IE与FF对HtmlElement属性操作的不同</title><link>http://www.blogjava.net/smcdl/archive/2007/09/12/144618.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Wed, 12 Sep 2007 13:17:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2007/09/12/144618.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/144618.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2007/09/12/144618.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/144618.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/144618.html</trackback:ping><description><![CDATA[今天突然发现IE和FF对于一些属性可以直接读取，使用element.attributeName或element[attributeName]形式。<br />
但是有些不可以，在FF下必须用element.getAttribute(attributeName)来读取。<br />
并且，IE下这三种方式的行为是一致的，而FF下前两种和后一种是不一致的。<br />
同理设置属性的方法也是不一致的。<br />
其内部的实现原理还不得而知，希望有知道的朋友指点一二。
 <img src ="http://www.blogjava.net/smcdl/aggbug/144618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2007-09-12 21:17 <a href="http://www.blogjava.net/smcdl/archive/2007/09/12/144618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JavaScript的Prototype更进一步的讨论</title><link>http://www.blogjava.net/smcdl/archive/2007/05/26/120133.html</link><dc:creator>teddy</dc:creator><author>teddy</author><pubDate>Sat, 26 May 2007 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/smcdl/archive/2007/05/26/120133.html</guid><wfw:comment>http://www.blogjava.net/smcdl/comments/120133.html</wfw:comment><comments>http://www.blogjava.net/smcdl/archive/2007/05/26/120133.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/smcdl/comments/commentRss/120133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smcdl/services/trackbacks/120133.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文里讲述的是关于JavaScript的prototype问题，如this成员和prototype成员有什么不同等。<br>本文属于中等级别的文章，如果大家对OOP of JavaScript还不清楚的话，请先去了解一下，<br>写本文的原因是习惯了Java、C#等语言，对于JavaScript的prototype（通常所说的原型）非常<br>不适应，很多朋友可能都有这样的体验，这篇文章能解答你们很多的同类问题。&nbsp;&nbsp;<a href='http://www.blogjava.net/smcdl/archive/2007/05/26/120133.html'>阅读全文</a><img src ="http://www.blogjava.net/smcdl/aggbug/120133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smcdl/" target="_blank">teddy</a> 2007-05-26 08:49 <a href="http://www.blogjava.net/smcdl/archive/2007/05/26/120133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>