﻿<?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/zhangchao/category/29889.html</link><description>Don't Cry!</description><language>zh-cn</language><lastBuildDate>Fri, 30 May 2008 01:28:21 GMT</lastBuildDate><pubDate>Fri, 30 May 2008 01:28:21 GMT</pubDate><ttl>60</ttl><item><title>javascript数组中的splice方法</title><link>http://www.blogjava.net/zhangchao/archive/2008/05/28/203462.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Wed, 28 May 2008 04:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/05/28/203462.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/203462.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/05/28/203462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/203462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/203462.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; splice方法是javascript中数组的一个方法,其功能是:可向数组删除并加入新的元素.其方法声明如下: <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">arrayObject.splice(index,howmany,element1,<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />..,elementX)</span></div>
index:必选项.指定在哪个位置加入/删除元素,必须是数字.<br />
howmany:必选项.指定有多少元素应该被删除,必须是数字,可以是"0".<br />
element1:可选.指定要加入到数组中的新元素.<br />
elementX:可选.可以加入多个元素.<br />
说明:如果howmany为0或"0",则该数组中将没有元素被删除,那么element1至elementX个参数将从index指定的位置插入到该数组中,数组中原位置的元素将后移.如果howmany不为0,则从index指定位置开始删除howmany个元素(包括index位置的元素),然后再从index开始插入element1至elementX个参数,数组中原位置的元素将后移.<br />
例1:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />var&nbsp;arr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Array(</span><span style="color: #000000">5</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Jani</span><span style="color: #000000">";</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hege</span><span style="color: #000000">";</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Stale</span><span style="color: #000000">";</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">3</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Kai&nbsp;Jim</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">4</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Borge</span><span style="color: #000000">";</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr.splice(</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">Lene</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
输出结果为:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Jani,Hege,Stale,Kai&nbsp;Jim,Borge<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Jani,Hege,Lene,Stale,Kai&nbsp;Jim,Borge</span></div>
例2:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />var&nbsp;arr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Array(</span><span style="color: #000000">5</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Jani</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hege</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Stale</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">3</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Kai&nbsp;Jim</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">4</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Borge</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr.splice(</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">Tove</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
输出结果为:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Jani,Hege,Stale,Kai&nbsp;Jim,Borge<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Jani,Hege,Tove,Kai&nbsp;Jim,Borge</span></div>
例3:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />var&nbsp;arr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Array(</span><span style="color: #000000">5</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Jani</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hege</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Stale</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">3</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Kai&nbsp;Jim</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr[</span><span style="color: #000000">4</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Borge</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />arr.splice(</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">3</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">Tove</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.write(arr);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
输出结果为:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Jani,Hege,Stale,Kai&nbsp;Jim,Borge<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />Jani,Hege,Tove</span></div>
<img src ="http://www.blogjava.net/zhangchao/aggbug/203462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-05-28 12:58 <a href="http://www.blogjava.net/zhangchao/archive/2008/05/28/203462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我所理解的原型对象</title><link>http://www.blogjava.net/zhangchao/archive/2008/05/09/199550.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Fri, 09 May 2008 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/05/09/199550.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/199550.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/05/09/199550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/199550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/199550.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;众所周知,javascript中的继承是通过原型对象(prototype)来实现的.原型对象是由函数的构造函数创建,它所拥有的属性能被所有对象共享.初始时原型对象指向一个Object对象,并且定义了一个constructor属性,该属性指向定义该原型对象的构造函数本身,上述过程可以理解为以下代码:<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: #0000ff">function</span><span style="color: #000000">&nbsp;BaseClass()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.write('This&nbsp;is&nbsp;BaseClass.');<br />
}<br />
BaseClass.prototype&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Object();<br />
BaseClass.prototype.constructor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;BaseClass;</span></div>
因为原型对象的所有属性能被构造函数创建对象共享,所以创建的对象可以访问这里的constructor属性:<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: #0000ff">var</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BaseClass();<br />
document.write(c.constructor&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;BaseClass);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">true</span><span style="color: #008000"><br />
</span><span style="color: #000000">c.constructor();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用BaseClass函数,输出This&nbsp;is&nbsp;BaseClass.</span></div>
由于对象本身也可以自定义属性,所以在读取对象属性时js先检查该对象是否定义了该属性,如果已经定义了则使用该属性,如果没有定义则再从其原型对象中读取该属性,所以如果对象自定义的属性和其原型中的属性存在重名则自定义属性"隐藏"了其原型对象中的同名属性.例:<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: #000000">c.constructor&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 />
&nbsp;&nbsp;&nbsp;&nbsp;document.write('This&nbsp;is&nbsp;c');<br />
}<br />
c.constructor();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">This&nbsp;is&nbsp;c</span></div>
加入上述代码之后再次调用c.constructor(),则会打印出"This is c".这是因为c已自定义constructor属性"隐藏"了其原型对象中的constructor属性.当然js保证了读写的不对称性,也就是说读取一个对象的属性时有可能要从其原型对象中去读取,但写一个对象的属性时却从不涉及其原型对象,无论在一个对象加入或修改多少属性这都不影响其原型对象中属性的本来面目.比如这里c自定义了constructor属性,但这一行为并不影响其原型对象中constructor指向其构造函数这一事实,如果再创建一个对象且不自定义constructor属性,再调用constructor则依然调用对象的构造函数,例:<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: #0000ff">var</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BaseClass();<br />
b.constructor();&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用BaseClass函数,输出This&nbsp;is&nbsp;BaseClass.</span></div>
<p>很容易理解js为什么这样做,因为一个对象的行为不能影响到其他对象,否则将会造成混乱.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;理解上述规则之后让我们看看js中是如何通过原型对象实现继承的.当我们创建一个对象时,可以把该对象看成是由2部分组成的,一部分存储了该对象自己定义的属性(称为A部分),而另一个部分则存储了其构造函数所定义的原型对象引用(称为B部分),例如这里的BaseClass.prototype.当读取对象的属性时可以分为以下2步:<br />
1.js先检查该对象引用所指向的内存区域的A部分是否存在该属性,如果存在则读出.<br />
2.如果没有则再从B部分存储的引用(BaseClass.prototype)所指向的内存区域中读取该属性.</p>
<p>从步骤2开始这就是个不断往上寻找的过程,因为BaseClass.prototype所指向的内存区域也会分为A和B两个部分,如果再A部分也不存在该属性,则又会从其B部分所指向的内存区域去寻找该属性,而该内存区域也有A和B两个部分,如果A部分仍然不存在,则还要从B部分所指向的内存区域去寻找该属性,直到达到最顶层的Object类.所以在无形当中就形成了一条链,也就是我们常说的原型链.如果理解了这个过程我想也就能了解原型对象了.下面简单分析下b.constructor();的调用过程便于加深理解.<br />
1.js会在b所指向的内存区域A部分读取constructor属性.<br />
2.当发现没有该属性后再从其类的构造函数原型对象引用所指向的内存区域读取该属性.因为原型对象引用初始时指向一Object对象内存区域(BaseClass.prototype = new Object();)<br />
3.再从此Object对象的A部分寻找constructor属性.<br />
4.没有找到该属性则从其类的原型对象即Object.prototype中去寻找constructor.<br />
5.如果找到该属性则调用.<br />
6.否则,到达链的顶端,返回.<br />
到此能很清楚的知道js中是如何实现继承的,如果我们自定义的类不想继承自Object,则可以修改其prototype的指向,可以让其指向任意一个类,这样也就实现了继承自定义类,但js中所有的类都继承自Object类,所以原型链的关系仍然存在.</p>
<img src ="http://www.blogjava.net/zhangchao/aggbug/199550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-05-09 16:43 <a href="http://www.blogjava.net/zhangchao/archive/2008/05/09/199550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript中的逻辑操作符</title><link>http://www.blogjava.net/zhangchao/archive/2008/03/13/185941.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Thu, 13 Mar 2008 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/03/13/185941.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/185941.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/03/13/185941.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/185941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/185941.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 昨天在看Ext的源码时发现了以下代码attributes = attributes || {};一直以为js中的逻辑操作符返回的结果是boolean值即true或false,查了下文档才发现其实不然.<br />
&nbsp;&nbsp;&nbsp; js的逻辑操作符有3种,即逻辑与(&amp;&amp;),逻辑或(||)和逻辑非(!).逻辑非始终返回一个boolean值,即true或false.而逻辑与和逻辑或则不一定返回boolean值.查了下文档才明白逻辑与和逻辑或执行的规则:<br />
逻辑与(&amp;&amp;):<br />
1.先执行左边的表达式,得到该表达式的值.<br />
2.尝试将该值转换成boolean.<br />
3.如果2的结果是false,则返回1中得到的值(如果该值不是false,而是一个其他的值,比如是个对象,则将返回这个对象而不是false),执行完毕.<br />
4.如果2的结果是true,执行右边表达式并得到值.<br />
5.返回4中得到的值.<br />
<br />
逻辑或(||):<br />
1.先执行左边的表达式,得到该表达式的值.<br />
2.尝试将该值转换成boolean.<br />
3.如果2的结果是true,则返回1中得到的值,执行完毕.<br />
4.如果2的结果是false,执行右边表达式并得到值.<br />
5.返回4中得到的值.<br />
<br />
总结:逻辑与如果左边是false,则整个表达式的值是左边表达式的值,如果为true,则整个表达式的值是右边表达式的值.<br />
逻辑或如果左边是true,则整个表达式的值是左边表达式的值,如果为false,则整个表达式的值是右边表达式的值.
<img src ="http://www.blogjava.net/zhangchao/aggbug/185941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-03-13 10:30 <a href="http://www.blogjava.net/zhangchao/archive/2008/03/13/185941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>悟透JavaScript(转)</title><link>http://www.blogjava.net/zhangchao/archive/2008/03/05/183888.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Wed, 05 Mar 2008 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/03/05/183888.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/183888.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/03/05/183888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/183888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/183888.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引子&nbsp;&nbsp;&nbsp; 编程世界里只存在两种基本元素，一个是数据，一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。&nbsp;&nbsp;&nbsp;&nbsp;数据天生就是文静的，总想保持自己固有的本色；而代码却天生活泼，总想改变这个世界。&nbsp;&nbsp;&nbsp; 你看，数据代码间的关系与物质能量间的关系有着惊人的...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhangchao/archive/2008/03/05/183888.html'>阅读全文</a><img src ="http://www.blogjava.net/zhangchao/aggbug/183888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-03-05 11:07 <a href="http://www.blogjava.net/zhangchao/archive/2008/03/05/183888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>