﻿<?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/aoneany/category/31013.html</link><description>欲上天堂，先下地狱</description><language>zh-cn</language><lastBuildDate>Mon, 23 Apr 2012 04:08:52 GMT</lastBuildDate><pubDate>Mon, 23 Apr 2012 04:08:52 GMT</pubDate><ttl>60</ttl><item><title>javascrip对象中的函数callback对象中的方法</title><link>http://www.blogjava.net/aoneany/articles/375487.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Sat, 21 Apr 2012 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/375487.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/375487.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/375487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/375487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/375487.html</trackback:ping><description><![CDATA[<div>当在函数类中的某一个对象，需要回调类中的某一个方法时，可以通过如下方式实现。<br />Test = function(testFuncObj){</div><div><span style="white-space:pre">	</span>var testFunc = testFuncObj;</div><div><span style="white-space:pre">	</span><span style="color: red; ">var _this = this;</span></div><div><span style="white-space:pre">	</span>this.render = function(parent){</div><div><span style="white-space:pre">		</span>testFunc.onClick(<span style="color: red; ">_this.onClick)</span></div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>this.onClick = function(node){</div><div><span style="white-space:pre">		</span>alert(node.text);</div><div><span style="white-space:pre">	</span>}</div><div>}</div><img src ="http://www.blogjava.net/aoneany/aggbug/375487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2012-04-21 23:35 <a href="http://www.blogjava.net/aoneany/articles/375487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript命令行完成自动添加受信任站点</title><link>http://www.blogjava.net/aoneany/articles/364250.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Fri, 18 Nov 2011 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/364250.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/364250.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/364250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/364250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/364250.html</trackback:ping><description><![CDATA[<p>&lt;SCRIPT LANGUAGE="JavaScript"&gt;&nbsp; <br />&lt;!--&nbsp; <br />var WshShell=new ActiveXObject("WScript.Shell");&nbsp; <br />WshShell.RegWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains\\YouTest.com","");&nbsp; <br />WshShell.RegWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains\\YouTest.com\\www","");&nbsp; <br />WshShell.RegWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Domains\\YouTest.com\\www\\http","2","REG_DWORD");&nbsp; <br />alert("写入成功");&nbsp; </p>
<p>//--&gt; <br />&lt;/SCRIPT&gt;&nbsp; </p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/aoneany/aggbug/364250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2011-11-18 15:30 <a href="http://www.blogjava.net/aoneany/articles/364250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java实现一个用户在同一时间只登陆一次</title><link>http://www.blogjava.net/aoneany/articles/272005.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 21 May 2009 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/272005.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/272005.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/272005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/272005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/272005.html</trackback:ping><description><![CDATA[<p>保证网站用户（或管理员）在同一时间只登陆一次在很多场合是很必要的！下面举一个基于Java平台实现的例子。<br />
&nbsp;&nbsp;&nbsp; <strong>第一步：创建SessionListenter类</strong></p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpSession;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpSessionEvent;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpSessionListener;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.log4j.Logger;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.jpxx.sw.Constants;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.jpxx.sw.Factory;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_222_353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_222_353_Open_Text.style.display='none'; Codehighlighter1_222_353_Closed_Image.style.display='inline'; Codehighlighter1_222_353_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_222_353_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_222_353_Closed_Text.style.display='none'; Codehighlighter1_222_353_Open_Image.style.display='inline'; Codehighlighter1_222_353_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_222_353_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">/**&nbsp;*/</span><span id="Codehighlighter1_222_353_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;该监听器用于监听后台管理员登陆。只允许统一管理员在同一时间登陆一次。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Jun&nbsp;Li<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;&nbsp;$Revision:&nbsp;1.0.2&nbsp;$,&nbsp;$Date:&nbsp;2009/01/05&nbsp;$<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@since</span><span style="color: #008000">&nbsp;1.0.0<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_415_1053_Open_Image" onclick="this.style.display='none'; Codehighlighter1_415_1053_Open_Text.style.display='none'; Codehighlighter1_415_1053_Closed_Image.style.display='inline'; Codehighlighter1_415_1053_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_415_1053_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_415_1053_Closed_Text.style.display='none'; Codehighlighter1_415_1053_Open_Image.style.display='inline'; Codehighlighter1_415_1053_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SessionListener&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HttpSessionListener&nbsp;</span><span id="Codehighlighter1_415_1053_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_415_1053_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Logger&nbsp;log&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Factory.getSingletonInstance().getLogger(SessionListener.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_556_562_Open_Image" onclick="this.style.display='none'; Codehighlighter1_556_562_Open_Text.style.display='none'; Codehighlighter1_556_562_Closed_Image.style.display='inline'; Codehighlighter1_556_562_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_556_562_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_556_562_Closed_Text.style.display='none'; Codehighlighter1_556_562_Open_Image.style.display='inline'; Codehighlighter1_556_562_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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sessionCreated(HttpSessionEvent&nbsp;event)&nbsp;</span><span id="Codehighlighter1_556_562_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_556_562_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_623_1051_Open_Image" onclick="this.style.display='none'; Codehighlighter1_623_1051_Open_Text.style.display='none'; Codehighlighter1_623_1051_Closed_Image.style.display='inline'; Codehighlighter1_623_1051_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_623_1051_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_623_1051_Closed_Text.style.display='none'; Codehighlighter1_623_1051_Open_Image.style.display='inline'; Codehighlighter1_623_1051_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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sessionDestroyed(HttpSessionEvent&nbsp;event)&nbsp;</span><span id="Codehighlighter1_623_1051_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_623_1051_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;event.getSession();<br />
<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">&nbsp;获取存储管理员的session</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;o&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.getAttribute(Constants.JPXX_ADMIN_LOGIN_USERNAME_SESSION);<br />
<img id="Codehighlighter1_807_1045_Open_Image" onclick="this.style.display='none'; Codehighlighter1_807_1045_Open_Text.style.display='none'; Codehighlighter1_807_1045_Closed_Image.style.display='inline'; Codehighlighter1_807_1045_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_807_1045_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_807_1045_Closed_Text.style.display='none'; Codehighlighter1_807_1045_Open_Image.style.display='inline'; Codehighlighter1_807_1045_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(o</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_807_1045_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_807_1045_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;o.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;登陆的用户都存储在Hashtable中，用户退出，从Hashtable中删除该用户</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Factory.getUsers().remove(userName);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(</span><span style="color: #000000">"</span><span style="color: #000000">删除用户：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;userName&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;java.util.Date());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
说明：由于该类来自于项目，有很多操作都进行了封装，您稍作修改即可正常使用。注释掉Logger，声明一个静态变量private static Hashtable user = new Hashtable();在sessionCreated()方法中将刚登陆的用户添加到user中。您还需要写注销的页面（jsp或者servlet），在页面里面调用session.invalidate(); 该方法会触发sessionDestroyed()事件！<br />
<br />
&nbsp;<strong>&nbsp;&nbsp; 第二部：将该监听器注册到web.xml<br />
</strong>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.jpxx.sw.business.SessionListener</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
说明：仅仅依靠session监听器不可能100%可靠，有可能用户不正常退出(例如直接关闭浏览器、系统断电等等)。针对直接关闭浏览器有如下解决方案：在被关闭的页面里面插入如下语句：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #ff0000">scroll</span><span style="color: #0000ff">="no"</span><span style="color: #ff0000">&nbsp;onUnload</span><span style="color: #0000ff">="Jpxx.forceLogout();"</span><span style="color: #ff0000">&nbsp;onbeforeunload</span><span style="color: #0000ff">="Jpxx.forceLogout();"</span><span style="color: #0000ff">&gt;</span></div>
<p>Jpxx.forceLogout()方法通过AJAX技术来强制注销用户，即调用session.invalidate()方法。 </p>
转载:<a href="http://www.jpxx.org/?tid=54">http://www.jpxx.org/?tid=54</a>
<img src ="http://www.blogjava.net/aoneany/aggbug/272005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2009-05-21 16:02 <a href="http://www.blogjava.net/aoneany/articles/272005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript字符串判断</title><link>http://www.blogjava.net/aoneany/articles/239274.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Fri, 07 Nov 2008 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/239274.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/239274.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/239274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/239274.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/239274.html</trackback:ping><description><![CDATA[<p>判断是否全为汉字</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">/</span><span style="color: #000000">[</span><span style="color: #000000">^/</span><span style="color: #000000">x00</span><span style="color: #000000">-/</span><span style="color: #000000">xff]</span><span style="color: #000000">/</span><span style="color: #000000">g.test(s))&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">含有汉字</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">全是字符</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<p>&nbsp;</p>
<p>var &nbsp; strTest="测试Test";&nbsp;&nbsp; <br />
alert(strTest.length);&nbsp;&nbsp;&nbsp;<br />
&nbsp;//显示为6，他把一个汉字当作一自字符，而我需要得到的结果是8，也就是把汉字当成两个字符</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;strTest</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">测试Test</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;alert(strTest.replace(</span><span style="color: #000000">/</span><span style="color: #000000">[</span><span style="color: #000000">^</span><span style="color: #000000">\x00</span><span style="color: #000000">-</span><span style="color: #000000">\xff]</span><span style="color: #000000">/</span><span style="color: #000000">g,'##').length);&nbsp;&nbsp;&nbsp;</span></div>
<p>以上方法只能求汉字加子母的情情况，为求值为1的情况就会产生异常了</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_31_227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_227_Open_Text.style.display='none'; Codehighlighter1_31_227_Closed_Image.style.display='inline'; Codehighlighter1_31_227_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_31_227_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_227_Closed_Text.style.display='none'; Codehighlighter1_31_227_Open_Image.style.display='inline'; Codehighlighter1_31_227_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">ADM.checkStrLen</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">(value)</span><span id="Codehighlighter1_31_227_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_31_227_Open_Text"><span style="color: #000000">{<br />
<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;str,Num&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(value</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<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: #0000ff">return</span><span style="color: #000000">&nbsp;Num;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_118_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_209_Open_Text.style.display='none'; Codehighlighter1_118_209_Closed_Image.style.display='inline'; Codehighlighter1_118_209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_118_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_118_209_Closed_Text.style.display='none'; Codehighlighter1_118_209_Open_Image.style.display='inline'; Codehighlighter1_118_209_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">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">value.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_118_209_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_118_209_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value.substring(i,i</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
<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: #0000ff">if</span><span style="color: #000000">&nbsp;(str</span><span style="color: #000000">&lt;=</span><span style="color: #000000">"</span><span style="color: #000000">~</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">判断是否双字节</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num</span><span style="color: #000000">+=</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<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: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num</span><span style="color: #000000">+=</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Num;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span></div>
<p>以上方法能解决汉字，字母，数据混合的情况</p>
<img src ="http://www.blogjava.net/aoneany/aggbug/239274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-11-07 16:25 <a href="http://www.blogjava.net/aoneany/articles/239274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序设置Extjs树中CheckBox的选中和取消选中设置</title><link>http://www.blogjava.net/aoneany/articles/223260.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Wed, 20 Aug 2008 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/223260.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/223260.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/223260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/223260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/223260.html</trackback:ping><description><![CDATA[<p>在Extjs中treepanel中树节点为checkbox类的节时，有时候我们需要用程序来设置他的选中和取消选中状态<br />
var nodes=tree.getChecked();&nbsp;<br />
if(nodes &amp;&amp; nodes.length){<br />
&nbsp;for(var i=0;i&lt;nodes.length;i++){<br />
&nbsp;&nbsp;//设置UI状态为未选中状态<br />
&nbsp;&nbsp;nodes[i].getUI().toggleCheck(false);<br />
&nbsp;&nbsp;//设置节点属性为未选中状态<br />
&nbsp;&nbsp;nodes[i].attributes.checked=false;<br />
&nbsp;}<br />
}<br />
这样通过获取已选择的节点，用程序取消选择状态<br />
反之可以设置未选中节点选中状态</p>
<img src ="http://www.blogjava.net/aoneany/aggbug/223260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-08-20 14:36 <a href="http://www.blogjava.net/aoneany/articles/223260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript多线程技术</title><link>http://www.blogjava.net/aoneany/articles/215550.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 17 Jul 2008 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/215550.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/215550.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/215550.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/215550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/215550.html</trackback:ping><description><![CDATA[<p>While increasingly more websites are fully or partially based on AJAX, it is still difficult to develop complicated AJAX applications. What is the main issue which causes this difficulty in developing AJAX applications? Is it asynchronous communication with the server, or is it GUI programming? Both are routinely performed by desktop window applications -- so why is development of AJAX applications which do the same things particularly difficult? </p>
<p>Let&#8217;s consider this issue using a simple example. Suppose that you want to build a tree-structured bulletin board system which loads the data for each article by communicating with the server according to user requests rather than loading all articles at one time from the server. Each article has 4 pieces of information associated with it: a unique ID within the bulletin board system, the name of the person who posted the article, the content of the article, and an array of the IDs of its child articles. To begin with, let&#8217;s assume that there is a JavaScript function named <code>getArticle()</code> which is responsible for loading a single article. This function receives the integer ID of the article to be loaded as an argument, and it retrieves the data of the article with that ID from the server. It then returns an object which has the 4 pieces of information contained in that article: <code>id, name, content</code>, and <code>children</code>. An example of this function in use can be written like this: </p>
<pre>function ( id ) {<br />
var a = getArticle(id);<br />
document.writeln(a.name + "&lt;br&gt;" + a.content);<br />
} </pre>
<p>As you may notice, calling this function many times with the same article ID, however, requires communications with the server again and again for no good reason. To counter this problem, consider the function <code>getArticleWithCache()</code>, which is a <code>getArticle()</code> with a cache capability. In this example, the data loaded by <code>getArticle()</code> will be simply retained as a global variable: </p>
<pre>var cache = {};<br />
function getArticleWithCache ( id ) {<br />
if ( !cache[id] ) {<br />
cache[id] = getArticle(id);<br />
}<br />
return cache[id];<br />
} </pre>
<p>Now the articles that have been read are cached. Now, let&#8217;s consider the function <code>backgroundLoad()</code>, which loads the data of all articles based on this mechanism. This function aims to preload all of the child articles in the background while the user is reading a given article. Because the article data is tree structured, a recursive algorithm can easily be written which traverses the tree and allows all articles to be loaded: </p>
<pre>function backgroundLoad ( ids ) {<br />
for ( var i=0; i &lt; ids.length; i++ ) {<br />
var a = getArticleWithCache(ids[i]);<br />
backgroundLoad(a.children);<br />
}<br />
} </pre>
<p>The <code>backgroundLoad()</code> function receives an array of IDs as an argument and applies our previously-defined <code>getArticleWithCache()</code> to each ID. This allows the data of the article corresponding to each ID to be cached. Then, by recursively calling <code>backgroundLoad()</code> on the IDs of the child articles of the loaded article, the entire article tree is cached. </p>
<p>So far, everything looks good. If you have worked on AJAX application development, however, you should know that this na&#239;ve implementation won&#8217;t work successfully. The example has been based on the tacit understanding that <code>getArticle()</code> uses synchronous communication. As a general rule, however, JavaScript requires the use of asynchronous communication in communicating with the server because it has only a single thread. In terms of simplicity, processing everything (including GUI events and rendering), on one thread is a good programming model, because it eliminates the need to think about the complicated problems associated with thread synchronization. On the other hand, it presents a significant problem in developing applications &#8211;which appear responsive to the user because the single-thread environment cannot respond to users&#8217; mouse clicking and/or key operation when the thread is working on something else (such as the <code>getArticle()</code> call). </p>
<p>What happens if synchronous communication is carried out within this single-threaded environment? Synchronous communication stops the browser&#8217;s execution until the communication result is obtained. The thread cannot respond to users while waiting for the communication result because the call from the server has not been completed, and the thread will remain blocked until the call returns. For this reason, it can not respond to users while it is waiting for the server&#8217;s response and the browser therefore looks frozen. This also holds true for the execution of <code>getArticleWithCache()</code> and <code>backgroundLoad()</code>, which are based on <code>getArticle()</code>. Because may take a considerable amount of time to download all of the articles, the browser freezing during that time is a serious problem for <code>backgroundLoad()</code> - since the browser is frozen, it is not possible in the first place to achieve the goal of preloading the data in the background while users are reading articles, since the article will be unreadable. </p>
<p>Since the use of synchronous communication creates a significant problem in usability as described above, JavaScript uses asynchronous communication as a general rule. Therefore, let&#8217;s rewrite the program above based on asynchronous communication. JavaScript requires asynchronous communications to be written in an event-driven programming style. In most instances, you specify a callback function which is called once the communication response has been received. For example, <code>getArticleWithCache()</code> defined above can be rewritten as: </p>
<pre>var cache = {};<br />
function getArticleWithCache ( id, callback ) {<br />
if ( !cache[id] ) {<br />
callback(cache[id]);<br />
} else {<br />
getArticle(id, function( a ){<br />
cache[id] = a;<br />
callback(a);<br />
});<br />
}<br />
} </pre>
<p>This program also internally calls the <code>getArticle()</code> function. It should be noted, however, that the version of <code>getArticle()</code> which is designed for asynchronous communication expects to receive a function as the second argument. When this version of <code>getArticle()</code> is called, it sends a request to the server, as before, however the function returns immediately without waiting for a response from the server. This means that when the execution is returned to the caller, the server response has not yet been retrieved. This allows the thread to work on other tasks until the server response is obtained and the callback function is called. As soon as this response is received from the server, the callback function specified as the second argument of <code>getArticle()</code> is invoked with the server&#8217;s response as an argument. Likewise, <code>getArticleWithCache()</code> has been changed so that it will expect a callback function as the second argument. This callback function will then be called within the callback function that is passed to <code>getArticle()</code> so that it will be executed after the server-communication is finished. </p>
<p>You may think that the above rewriting alone is rather complicated, but the <code>backgroundLoad()</code> function involves even more complicated rewriting. It can be also rewritten to handle a callback function: </p>
<pre>function backgroundLoad ( ids, callback ) {<br />
var i = 0;<br />
function l ( ) {<br />
if ( i &lt; ids.length ) {<br />
getArticleWithCache(ids[i++], function( a ){<br />
backgroundLoad(a.children, l);<br />
});<br />
} else {<br />
callback();<br />
}<br />
}<br />
l();<br />
} </pre>
<p>This rewritten <code>backgroundLoad()</code> function does not look much like our original function, however there is no difference in what they do. This means that both functions receive an array of IDs, call <code>getArticleWithCache()</code> on each element of the array, and recursively apply <code>backgroundLoad()</code> to the resultant child articles. However, it is not easy to recognize even the loop structure for the array, which was represented by a for-statement in the original program. Why are these two sets of functions that do the same thing so totally different from each other? </p>
<p>The difference results from the fact that any function must return immediately after any function that requires server-communication, such as <code>getArticleWithCache()</code>. The callback function that should receive the server response cannot be called unless the original function is no longer executing. For JavaScript, it is not possible to suspend the program in the middle of loops, such as for-statements, and resume it later at the point where execution was suspended; the loop is therefore represented by recursively passing the callback function instead of using a loop syntax. For those who are familiar with Continuation-Passing Style (CPS), this is a manual implementation of CPS. Because no loop syntax can be used, even the simple program described earlier that traverses a tree requires complicated statements. The problem associated with event-driven programs is known as the <a href="http://www.cis.upenn.edu/~stevez/papers/LZ04a.pdf">control flow problem</a>: loop and other control flow statements are likely to be difficult to understand.</p>
<p>There is another problem: if you convert a function which does not use asynchronous communication into a function that uses asynchronous communication, the rewritten function will need to have a new parameter which is a callback functions. This poses a significant problem to existing APIs since our internal changes will not remain internal, but will result in broken APIs and changes by others using our API. </p>
<p>What is the root cause of all of these problems? That&#8217;s right. The fact that JavaScript has only one thread causes the problems. Carrying out asynchronous communication on only one thread requires an event-driven program and complicated statements. If another thread could respond to users while the program is waiting for the server response, acrobatics like this would not be required. </p>
<h3>Invitation to Multithreaded Programming</h3>
<p>Let me talk about Concurrent.Thread, a library that allows JavaScript to use multiple threads, since this greatly eases the difficulty associated with asynchronous communication in the AJAX development mentioned above. This is a free-software library implemented in JavaScript, available under the Mozilla Public License / GNU General Public License. You can download the source code <a href="http://jsthread.sourceforge.net/">from the website</a>. </p>
<p>Let&#8217;s download and use the source code right away. Suppose that you have saved the downloaded source code as a file named Concurrent.Thread.js. Before doing anything else, let&#8217;s run the program below, which has a very na&#239;ve implementation: </p>
<pre>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
Concurrent.Thread.create(function(){<br />
var i = 0;<br />
while ( 1 ) {<br />
document.body.innerHTML += i++ + "&lt;br&gt;";<br />
}<br />
});<br />
&lt;/script&gt; </pre>
<p>Executing this program should display numbers starting with 0 in order. Numbers appear one after another, which you can view by scrolling the page. Now, let&#8217;s look at the source code in more detail. It uses a simple infinite loop as indicated by <code>while ( 1 )</code>. In ordinary cases, a JavaScript program like this continues to use the one and only thread, causing the browser to look frozen. Naturally, it does not allow you to scroll the screen. Then, why does the above program allow you to scroll? The key is <code>Concurrent.Thread.create()</code> located above while <code>( 1 )</code>. This is a method provided by the library; it is for creating a new thread. On a new thread, the function passed as the argument is executed. Let me slightly rewrite the program as follows: </p>
<pre>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
function f ( i ){<br />
while ( 1 ) {<br />
document.body.innerHTML += i++ + "&lt;br&gt;";<br />
}<br />
}<br />
Concurrent.Thread.create(f, 0);<br />
Concurrent.Thread.create(f, 100000);<br />
&lt;/script&gt; </pre>
<p>In this program we have a new function <code>f()</code>, which shows numbers repeatedly. This is defined at the top, and the <code>create()</code> method is called twice with <code>f()</code> as arguments. The second argument passed to the <code>create()</code> method is passed to <code>f()</code> without modification. Executing this program shows some small numbers starting with 0, which are followed by some large numbers starting with 100,000 and small numbers again that follow up the first series of small numbers. Like this, you can observe that the program shows alternating lines of small numbers and large numbers. This indicates that two threads are running concurrently. </p>
<p>Let me show you another use of Concurrent.Thread. In the above example, the <code>create()</code> method was called to create a thread. It is also possible to create a thread without calling any library APIs at all. For example, the former example can be expressed as: </p>
<pre>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/x-script.multithreaded-js"&gt;<br />
var i = 1;<br />
while ( 1 ) {<br />
document.body.innerHTML += i++ + "&lt;br&gt;";<br />
}<br />
&lt;/script&gt; </pre>
<p>Inside the script tag, an infinite loop is written simply in JavaScript. You should take note of the type attribute of the tag: an unfamiliar value (<code>text/x-script.multithreaded-js</code>) is assigned to it. If this attribute is assigned to the script tag, then Concurrent.Thread executes the content of the tag on a new thread. You should remember that, in this case as well, the library body of Concurrent.Thread must be included. </p>
<p>With Concurrent.Thread, it is possible to switch execution context from one thread to another as needed even if you write a long and continuous program. Let me briefly talk about how this behavior is achieved. In short, code conversion is used. Very roughly speaking, the function passed to the <code>create()</code> method is first converted to a character string, which is then rewritten so that it can be executed on a piecemeal basis. Then, the rewritten function is executed little by little on the scheduler. The scheduler is responsible for coordinating multiple threads. In other words, it makes adjustments so that each of the rewritten functions will be evenly executed. Concurrent.Thread actually does not create new threads but simply simulates a multi-threaded environment on the original single thread. </p>
<p>Although the converted functions appear to be running on different threads, there is actually only one thread running everything. Carrying out synchronous communication within the converted functions will still cause the browser to freeze. You may think that our original problem has not been solved at all, however you don&#8217;t have to worry. Concurrent.Thread provides a purpose-built communications library which is implemented using the asynchronous JavaScript communication style and which is designed to allow the other threads to work even when a thread is waiting for a response from the server. This communications library is found under the <code>Concurrent.Thread.Http</code> namespace. For example, it is used as follows: </p>
<pre>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/x-script.multithreaded-js"&gt;<br />
var req = Concurrent.Thread.Http.get(url, ["Accept", "*"]);<br />
if (req.status == 200) {<br />
alert(req.responseText);<br />
} else {<br />
alert(req.statusText);<br />
}<br />
&lt;/script&gt; </pre>
<p>The <code>get()</code> method retrieves the content of the specified URL using <code>HTTP GET</code>, as its name suggests. It takes a target URL as the first argument and an array representing HTTP header fields as the optional second argument. The <code>get()</code> method communicates with the server and returns an XMLHttpRequest object as the return value when it has received the server response. When the <code>get()</code> method returns, the response had been received. It is not necessary to use a callback function to receive the result. Naturally, there is no worry that the browser freezes while the program is waiting a response from the server. In addition, the <code>post()</code> method can be used to send data to the server: </p>
<pre>&lt;script type="text/javascript" src="Concurrent.Thread.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/x-script.multithreaded-js"&gt;<br />
var req = Concurrent.Thread.Http.post(url, "key1=val1&amp;key2=val2");<br />
alert(req.statusText);<br />
&lt;/script&gt; </pre>
<p>The <code>post() method takes a destination URL as the first argument and content body to be sent as the second argument. As with the <code>get()</code> method, you can also assign header fields by the optional third argument. </code></p>
<p>If you implement <code>getArticle()</code> in the first example using this communications library, then you can quickly write <code>getArticleWithCache()</code>, <code>backgroundLoad()</code>, and other functions that use <code>getArticle()</code> using the na&#239;ve method shown at the beginning of this article. Even when that version of <code>backgroundLoad()</code> is reading article data, another thread can respond to users as a matter of course, and the browser therefore does not freeze. Now, do you understand how useful it is to use multiple threads in JavaScript? <br />
</p>
<p><br />
&nbsp;</p>
<p>转载:http://www.infoq.com/articles/js_multithread</p>
<img src ="http://www.blogjava.net/aoneany/aggbug/215550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-07-17 17:23 <a href="http://www.blogjava.net/aoneany/articles/215550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>document.createElement("input")动态创建html元素时checkbox和radio默认选中的问题</title><link>http://www.blogjava.net/aoneany/articles/206940.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Tue, 10 Jun 2008 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/206940.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/206940.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/206940.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/206940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/206940.html</trackback:ping><description><![CDATA[<p><font style="background-color: #c7edcc">最近研究createElement的时候发现一个奇怪的问题 <br />
<br />
var echkbox=document.createElement("input");<br />
echkbox.setAttribute("type","checkbox");<br />
echkbox.setAttribute("id","inputid");<br />
echkbox.setAttribute("name","inputname");<br />
echkbox.setAttribute("value","inputvalue");<br />
echkbox.setAttribute("checked","checked");<br />
var addhere=document.getElementById("someElementId");<br />
addhere.appendChild(echkbox);<br />
alert(document.getElementById("inputid").checked);</font></p>
<p><font style="background-color: #c7edcc">ie7显示出来的checkbox居然是未选中的但是alert出来的却是true，而FF一切正常<br />
后来查了半天资料说是ie显示的时候只对状态改变比较敏感<br />
改成<br />
var echkbox=document.createElement("input");<br />
echkbox.setAttribute("type","checkbox");<br />
echkbox.setAttribute("id","inputid");<br />
echkbox.setAttribute("name","inputname");<br />
echkbox.setAttribute("value","inputvalue");<br />
var addhere=document.getElementById("someElementId");<br />
addhere.appendChild(echkbox);<br />
echkbox.setAttribute("checked","checked");<br />
alert(document.getElementById("inputid").checked);</font></p>
<p><font style="background-color: #c7edcc">一切ok<br />
radio同样是这种情况。</font></p>
转自 someone's something空间
<img src ="http://www.blogjava.net/aoneany/aggbug/206940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-06-10 16:27 <a href="http://www.blogjava.net/aoneany/articles/206940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>float在IE和firefox中的使用</title><link>http://www.blogjava.net/aoneany/articles/203012.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Mon, 26 May 2008 11:09:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/203012.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/203012.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/203012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/203012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/203012.html</trackback:ping><description><![CDATA[<p><font style="background-color: #c7edcc">在IE和firefox中，对文档对象DIV标签的停靠方式不同,如在IE中他就识别float的属性，但是在firefox中他就需要</font>cssFloat<br />
</p>
<p>firefox下代码</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv.style.width</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">101</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iDiv1</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#FFEE00</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv1.style.width</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.style.cssFloat</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">右边</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv1.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;oDiv.appendChild(iDiv1);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iDiv2</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#881200</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.width</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.cssFloat</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">中间边</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv.appendChild(iDiv2);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iDiv3</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#235500</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.width</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.cssFloat</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.overflow</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hidden</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv.appendChild(iDiv3);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">).innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">oDiv.innerHTML;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>IE代码<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oDiv.style.width</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">101</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv1</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#FFEE00</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv1.style.width</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.style.</span><span style="color: #0000ff">float</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;iDiv1.innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">右边</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv1.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;oDiv.appendChild(iDiv1);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iDiv2</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#881200</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.width</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.</span><span style="color: #0000ff">float</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">中间边</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv2.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv.appendChild(iDiv2);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iDiv3</span><span style="color: #000000">=</span><span style="color: #000000">document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">div</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.background</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#235500</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.width</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.height</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.</span><span style="color: #0000ff">float</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">left</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />iDiv3.style.overflow</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hidden</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />oDiv.appendChild(iDiv3);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />document.getElementById(</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">).innerHTML</span><span style="color: #000000">=</span><span style="color: #000000">oDiv.innerHTML;</span></div>
<img src ="http://www.blogjava.net/aoneany/aggbug/203012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-05-26 19:09 <a href="http://www.blogjava.net/aoneany/articles/203012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript适别不同的浏览器和平台</title><link>http://www.blogjava.net/aoneany/articles/203010.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Mon, 26 May 2008 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/203010.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/203010.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/203010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/203010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/203010.html</trackback:ping><description><![CDATA[<font style="background-color: #c7edcc">在不同的平台和不同的浏览器中对javascript的支持也不同，在我们写javascript过程中，需要尽量避免他的不兼容性，一般都采用最小公母法，尽量满足不同平台和不同浏览器的我需要，但是对于某些特定功能，我就需要在不同的浏览中实现不同的方法，因此我们就必须能实别不同的平台和浏览器<br />
如下就是适别不同的平台和浏览器方法<br />
//浏览器版本<br />
ADM.BROWERVERSION=parseInt(navigator.appVersion);<br />
//是否为NETSCAPE浏览器<br />
ADM.ISNETSCAPE=navigator.appName.indexOf("Netscape")!=-1;<br />
//是否为IE浏览器<br />
ADM.ISIE=navigator.appName.indexOf("Microsoft")!=-1;<br />
//代理<br />
ADM.AFENT=navigator.appName.toLowerCase();<br />
//是否为WINDOWS平台理<br />
ADM.ISWINDOWS=ADM.AFENT.indexOf("win")!=-1;<br />
//是否为MAC平台理<br />
ADM.ISMAC=ADM.AFENT.indexOf("mac")!=-1;<br />
//是否为UNIX平台理<br />
ADM.ISUNIX=ADM.AFENT.indexOf("x11")!=-1;</font>
<img src ="http://www.blogjava.net/aoneany/aggbug/203010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-05-26 18:56 <a href="http://www.blogjava.net/aoneany/articles/203010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>树转化为表格图型展现</title><link>http://www.blogjava.net/aoneany/articles/199752.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Sat, 10 May 2008 14:04:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/199752.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/199752.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/199752.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/199752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/199752.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做过</span><span lang="EN-US">olap</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的人可能都知道，他查出来的表的结构就是一棵树，我们需要把树转化为表，通过表格的样式用图型更加客观的展现出来</span>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们有一棵这样的树</span></p>
<p><img style="width: 511px; height: 253px" height="253" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/tree.jpg" width="511" border="0" /><br />
<span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">我们现在要把这棵树转化成如下的表格样式</span><br />
<img style="width: 518px; height: 181px" height="181" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/r_biaoge.jpg" width="518" border="0" /><br />
&nbsp; </p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过表格我们可以看出，他有三部份，主栏，宾栏，主体，而主栏，是一颗向右展开的树，宾栏是一颗向下展开的树，而主体部份则是一个表格</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表格的整体布局</span></p>
<p><img height="267" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/kuang.gif" width="496" border="0" /><br />
主栏<br />
<img style="width: 482px; height: 212px" height="212" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/zhulan.gif" width="482" border="0" /><br />
HTML结构</p>
<p class="MsoNormal"><span lang="EN-US">&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">李宁</span><span lang="EN-US">DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鞋</span><span lang="EN-US">/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上衣</span><span lang="EN-US">DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/DIV&gt;<br />
</span></p>
<p class="MsoNormal"><span lang="EN-US">宾栏<br />
</span><span lang="EN-US"><img style="width: 461px; height: 306px" height="306" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/binlan.gif" width="461" border="0" /><br />
</span><span lang="EN-US">HTML结构</span><span lang="EN-US"></p>
<p class="MsoNormal"><span lang="EN-US">&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大区</span><span lang="EN-US">&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">华北</span><span lang="EN-US">&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">华中</span><span lang="EN-US">&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/DIV&gt;<br />
</span><span lang="EN-US">主体<br />
</span><span lang="EN-US"><img style="width: 502px; height: 150px" height="150" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/zhuti.gif" width="502" border="0" /><br />
</span><span lang="EN-US">HTML结构</span><span lang="EN-US"></p>
<p class="MsoNormal"><span lang="EN-US">&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;l&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/DIV&gt;</span></p>
<p class="MsoNormal"><span lang="EN-US">&lt;/DIV&gt;<br />
</span></p>
<p class="MsoNormal"><span lang="EN-US">其中在HTML中边框全部采用宽度或高度为1PX的DIV构成<br />
</span><span lang="EN-US">在div布局中，横向展开采用的属性是float="left"<br />
</span><span lang="EN-US"><br />
</span></p>
<p class="MsoNormal">我设计的Js类结构图如下<br />
<span lang="EN-US"><img style="width: 473px; height: 321px" height="321" alt="" src="http://www.blogjava.net/images/blogjava_net/aoneany/31421/js_class.gif" width="473" border="0" /><br />
</span></p>
<p class="MsoNormal">一个由树转化为表格的程序就完成，但是在开发过程中，有时候也碰到一些问题，如效率等，如有哪位对这控件或报表开发方面有兴趣的，大家一起交流<span lang="EN-US"></p>
</span></span></span>
<img src ="http://www.blogjava.net/aoneany/aggbug/199752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-05-10 22:04 <a href="http://www.blogjava.net/aoneany/articles/199752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Firebug的使用</title><link>http://www.blogjava.net/aoneany/articles/198592.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Mon, 05 May 2008 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/198592.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/198592.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/198592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/198592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/198592.html</trackback:ping><description><![CDATA[<h3>什么是Firebug</h3>
<p>从事了数年的Web开发工作，越来越觉得现在对WEB开发有了更高的要求。要写出漂亮的HTML代码；要编写精致的CSS样式表展示每个页面模块；要调试<a href="http://www.ooso.net/index.php/archives/category/javascript/">javascript</a>给页面增加一些更活泼的要素；要使用Ajax给用户带来更好的体验。一个优秀的WEB开发人员需要顾及更多层面，才能交出一份同样优秀的作业。为帮助广大正处于Web2.0洪流中的开发人员，在这里为大家介绍一款轻巧灵活的辅助开发工具。</p>
<p>Firebug是Firefox下的一款开发类插件，现属于<a href="http://www.ooso.net/index.php/archives/category/firefox/">Firefox</a>的五星级强力推荐插件之一。它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体，是开发JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀，从各个不同的角度剖析Web页面内部的细节层面，给Web开发者带来很大的便利。这是一款让人爱不释手的插件，如果你以前没有接触过它，也许在阅读本文之后，会有一试的欲望。笔者在撰写此文的时候，正逢Firebug发布1.0正式版，这不能不说是种巧合。<br />
</p>
<h3>应用</h3>
<p>Firebug插件虽然功能强大，但是它已经和Firefox浏览器无缝地结合在一起，使用简单直观。如果你担心它会占用太多的系统资源，也可以方便地启用/关闭这个插件，甚至针对特定的站点开启这个插件。</p>
<p>在安装好插件之后，先用Firefox浏览器打开需要测试的页面，然后点击右下方的绿色按钮或使用快捷键F12唤出Firebug插件，它会将当前页面分成上下两个框架，如图1所示。</p>
<p>图1：Firebug插件展开图示<br />
<img style="width: 522px; height: 128px" height="128" alt="firebug插件展开图示" src="http://www.ooso.net/wp-content/uploads/2007/firebug1.gif" width="522" /><br />
从图1中看到，Firebug有6个主要的Tab按钮，下文将主要介绍介绍这几方面的功能。</p>
<table cellpadding="4" border="1">
    <tbody>
        <tr>
            <td>Console</td>
            <td>HTML</td>
            <td>CSS</td>
            <td>Script</td>
            <td>Dom</td>
            <td>Net</td>
        </tr>
        <tr>
            <td>控制台</td>
            <td>Html查看器</td>
            <td>Css查看器</td>
            <td>脚本条时期 </td>
            <td>Dom查看器</td>
            <td>网络状况监视</td>
        </tr>
    </tbody>
</table>
<h3>Console 控制台</h3>
<p>控制台能够显示当前页面中的javascript错误以及警告，并提示出错的文件和行号，方便调试，这些错误提示比起浏览器本身提供的错误提示更加详细且具有参考价值。而且在调试Ajax应用的时候也是特别有用，你能够在控制台里看到每一个XMLHttpRequests请求post出去的参数、URL，http头以及回馈的内容，原本似乎在幕后黑匣子里运作的程序被清清楚楚地展示在你面前。</p>
<p>象C shell或Python shell一样，你还能在控制台中查看变量内容，直接运行javascript语句，就算是大段的javascript程序也能够正确运行并拿到运行期的信息。</p>
<p>控制台还有个重要的作用就是查看脚本的log, 从前你也许习惯了使用alert来打印变量，但是Firebug给我们带来了一个新朋友 —— console.log, 最简单的打印日志的语法是这样的： </p>
<div class="igBar"><span id="lcode-1"><a onclick="javascript:showCodeTxt('code-1'); return false;" href="http://www.ooso.net/index.php/archives/294#">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-1">
<div class="code">
<ol>
    <li style="font-weight: normal; color: #3a6a8b; font-style: normal; font-family: 'Courier New', Courier, monospace">
    <div style="font-weight: normal; font-family: 'Courier New', Courier, monospace">console.<span>log</span><span style="font-weight: bold; color: #006600">(</span><span style="color: #cc0000">"hello world"</span><span style="font-weight: bold; color: #006600">)</span> </div>
    </li>
</ol>
</div>
</div>
</div>
<p>如果你有一堆参数需要组合在一起输出，可以写成这样：</p>
<div class="igBar"><span id="lcode-2"><a onclick="javascript:showCodeTxt('code-2'); return false;" href="http://www.ooso.net/index.php/archives/294#">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-2">
<div class="code">
<ol>
    <li style="font-weight: normal; color: #3a6a8b; font-style: normal; font-family: 'Courier New', Courier, monospace">
    <div style="font-weight: normal; font-family: 'Courier New', Courier, monospace">console.<span>log</span><span style="font-weight: bold; color: #006600">(</span><span style="color: #800000">2</span>,<span style="color: #800000">4</span>,<span style="color: #800000">6</span>,<span style="color: #800000">8</span>,<span style="color: #cc0000">"foo"</span>,bar<span style="font-weight: bold; color: #006600">)</span>. </div>
    </li>
</ol>
</div>
</div>
</div>
<p>Firebug的日志输出有多种可选的格式以及语法，甚至可以定制彩色输出，比起单调的alert，显然更加方便，限于篇幅，这里不做详细说明，但是有志于提高debug效率的读者，可以到Firebug的官方站点（见附录）查看更详细的教程。</p>
<p>图2： 在控制台里调试javascript<br />
<img style="width: 532px; height: 202px" height="202" alt="在控制台里调试javascript" src="http://www.ooso.net/wp-content/uploads/2007/firebug2.gif" width="532" /></p>
<h3>查看和修改HTML</h3>
<p>第一次看到Firebug强大的HTML代码查看器，就觉得它与众不同，相比于Firefox自带的HTML查看器，它的功能强大了许多。 HTML</p>
<p>首先你看到的是已经经过格式化的HTML代码，它有清晰的层次，你能够方便地分辨出每一个标签之间的从属并行关系，标签的折叠功能能够帮助你集中精力分析代码。源代码上方还标记出了DOM的层次，如图3所示，它清楚地列出了一个hml元素的parent、child以及root元素，配合Firebug自带的CSS查看器使用，会给div+css页面分析编写带来很大的好处。你还可以在HTML查看器中直接修改HTML源代码，并在浏览器中第一时间看到修改后的效果，光凭这一点就会让许多页面设计师死心塌地地成为Firebug的粉丝了。</p>
<p>有时候页面中的javascript会根据用户的动作如鼠标的onmouseover来动态改变一些HTML元素的样式表或背景色，HTML查看器会将页面上改变的内容也抓下来，并以黄色高亮标记，让网页的暗箱操作彻底成为历史。</p>
<p>利用Inspect检查功能，我们还可以用鼠标在页面中直接选择一些区块，查看相应的HTML源代码和CSS样式表，真正的做到所见即所得，如果你使用了外部编辑器修改了当前网页，可以点击Firebug的reload图片重新载入网页，它会继续跟踪你之前用Inspect选中的区块，方便调试。</p>
<p>图3:：HTML查看器<br />
<img alt="HTML查看器" src="http://www.ooso.net/wp-content/uploads/2007/firebug3.gif" /></p>
<h3>CSS调试</h3>
<p>Firebug的CSS调试器是专为网页设计师们量身定做的。</p>
<p>如今的网页设计言必称div+css，如果你是用table套出来的HTML页面，就得按这规矩重构一遍，否则显得你不够时髦！用div做出来的页面的确能精简HTML代码，HTML标签减肥的结果就是CSS样式表的编写成了页面制作的重头戏。Firebug的CSS查看器不仅自下向上列出每一个CSS样式表的从属继承关系，还列出了每一个样式在哪个样式文件中定义。你可以在这个查看器中直接添加、修改、删除一些CSS样式表属性，并在当前页面中直接看到修改后的结果。</p>
<p>一个典型的应用就是页面中的一个区块位置显得有些不太恰当，它需要挪动几个象素。这时候用CSS调试工具可以轻易编辑它的位置——你可以根据需要随意挪动象素。<br />
如图4中正在修改一个区块的背景色。</p>
<p>提示：如果你正在学习CSS样式表的应用，但是总记不住常用的样式表有哪些值，可以尝试在CSS调试器中选中一个样式表属性，然后用上下方向键来改变它的值，它会把可能的值一个个遍历给你看。</p>
<p>图4: CSS查看器，能够直接修改样式表<br />
<img alt="图4: CSS查看器，能够直接修改样式表" src="http://www.ooso.net/wp-content/uploads/2007/firebug4.gif" /></p>
<h3>可视化的CSS尺标</h3>
<p>我们可以利用Firebug来查看页面中某一区块的CSS样式表，如果进一步展开右侧Layout tab的话，它会以标尺的形式将当前区块占用的面积清楚地标识出来，精确到象素，更让人惊讶的是，你能够在这个可视化的界面中直接修改各象素的值，页面上区块的位置就会随改动而变化。在页面中某些元素出现错位或者面积超出预料值时，该功能能够提供有效的帮助，你可以籍此分析offset、margin、padding、size之间的关系，从而找出解决问题的办法。</p>
<p>图5：Firebug中的CSS标尺<br />
<img style="width: 513px; height: 431px" height="431" alt="图5：Firebug中的CSS标尺" src="http://www.ooso.net/wp-content/uploads/2007/firebug5.gif" width="513" /></p>
<h3>网络状况监视器</h3>
<p>也许有一天，你的老板或者客户找到你，抱怨你制作的网页速度奇慢，你该如何应对？你或许会说这可能是网络问题，或者是电脑配置问题，或者是程序太慢，或者直说是他们的人品问题？不管怎么说，最后你可能被要求去解决这个有多种可能的问题。</p>
<p>网络状况监视器能帮你解决这个棘手问题。Firebug的网络监视器同样是功能强大的，它能将页面中的CSS、javascript以及网页中引用的图片载入所消耗的时间以矩状图呈现出来，也许在这里你能一把揪出拖慢了你的网页的元凶，进而对网页进行调优，最后老板满意客户欢喜，你的饭碗也因此而牢固。</p>
<p>网络监视器还有一些其它细节功能，比如预览图片，查看每一个外部文件甚至是xmlHttpRequests请求的http头等等。</p>
<p>图6：网络状况监视器<br />
<img style="width: 483px; height: 72px" height="72" alt="图6：网络状况监视器" src="http://www.ooso.net/wp-content/uploads/2007/firebug6.gif" width="483" /></p>
<h3>Javascript调试器</h3>
<p>这是一个很不错的javascript脚本调试器，占用空间不大，但是单步调试、设置断点、变量查看窗口一个不少。正所谓麻雀虽小，五脏俱全。</p>
<p>如果你有一个网站已经建成，然而它的javascript有性能上的问题或者不是太完美，可以通过面板上的Profile来统计每段脚本运行的时间，查看到底是哪些语句执行时间过长，一步步排除问题。</p>
<p>图7：javascript调试器<br />
<img style="width: 501px; height: 274px" height="274" alt="图7：javascript调试器" src="http://www.ooso.net/wp-content/uploads/2007/firebug7.gif" width="501" /></p>
<h3>DOM查看器</h3>
<p>DOM(Document Object Model)里头包含了大量的Object以及函数、事件，在从前，你要想从中查到需要的内容，绝非易事，这好比你去了一个巨大的图书馆，想要找到几本名字不太确切的小书，众多的选择会让你无所适从。而使用Firebug的DOM查看器却能方便地浏览DOM的内部结构，帮助你快速定位DOM对象。双击一个DOM对象，就能够编辑它的变量或值，编辑的同时，你可能会发现它还有自动完成功能，当你输入document.get之后，按下tab键就能补齐为document.getElementById，非常方便。如果你认为补齐得不够理想，按下shift+tab又会恢复原状。用了Firebug的DOM查看器，你的javascript从此找到了驱使的对象，Web开发也许就成了一件乐事。</p>
<p>图8: Dom查看器<br />
<img style="width: 521px; height: 171px" height="171" alt="图8: Dom查看器" src="http://www.ooso.net/wp-content/uploads/2007/firebug8.gif" width="521" /></p>
<h3>小结</h3>
<p>Firebug插件提供了一整套web开发所必需的工具。从HTML的编写，到CSS样式表的美化调优，以及用javascript脚本开发，亦或是Ajax应用，Firebug插件都会成为你的得力助手。所谓工欲善其事，必先利其器。在Web2.0的时代，言必称Ajax，动辄就是用户体验提升，如果把Firebug工具用好，必能让你如虎添翼，将HTML、CSS、javascript整理得服服帖帖，从此成为web开发中的专家级人物。</p>
<h3>附</h3>
<p>Firebug的中文含义是萤火虫，作者是Joe Hewitt，官方网页 http://www.getfirebug.com<br />
Firefox亦即火狐浏览器，是近年来撼动IE浏览器市场占有率的一支强大力量，要不是它的出现，我想有生之年说不定也看不到IE 7的发布了，官方网页 http://www.firefox.com</p>
引用:http://www.ooso.net/index.php/archives/294 
<img src ="http://www.blogjava.net/aoneany/aggbug/198592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-05-05 23:05 <a href="http://www.blogjava.net/aoneany/articles/198592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript编辑器和调试工具</title><link>http://www.blogjava.net/aoneany/articles/198591.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Mon, 05 May 2008 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/198591.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/198591.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/198591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/198591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/198591.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近在做javascript开发，想找一个比较好的javasctipt编辑器，在网上看到了对1st JavaScript Editor 的评价不错，集成代码自动弹出显示，验证错误功能。可以说是最好的一个javascript编辑器了，于是把它下下来，用起来确实还不错，对于javascrtipt初学者还是javasctipt工程师，建议用这个工具。<br />
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是他对检错方面没有myesclipse的好，对于有一些警告和错误它不能提示出来</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于javasctipt调试工具，也有好几种可选择的方法,由于机器比较慢，我采用的是firefox+firebug来调试，在网上找了一篇介绍的文件，等下把它帖出来，开发.Net的人都知道，vs是一个很不错的调试javasctipt工具，我以前也一直用这个来调试javasctipt,不过专门用来调试javasctipt，可以说是大材小用了</p>
<img src ="http://www.blogjava.net/aoneany/aggbug/198591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-05-05 23:03 <a href="http://www.blogjava.net/aoneany/articles/198591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dom-Drag学习</title><link>http://www.blogjava.net/aoneany/articles/195582.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 24 Apr 2008 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/195582.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/195582.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/195582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/195582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/195582.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如果你想实现Web上的组件能用鼠标随意拖动到页面的任意位置或指定的位置等，那你就要看看dom-drag.js了。dom-drag.js可以从http://youngpup.net/projects/dom-drag/下载到，作者 Aaron Boodman。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其作者称其为面向现代DHTML浏览器的轻...&nbsp;&nbsp;<a href='http://www.blogjava.net/aoneany/articles/195582.html'>阅读全文</a><img src ="http://www.blogjava.net/aoneany/aggbug/195582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-04-24 14:41 <a href="http://www.blogjava.net/aoneany/articles/195582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子</title><link>http://www.blogjava.net/aoneany/articles/195574.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 24 Apr 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/195574.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/195574.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/195574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/195574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/195574.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面已经了解到，JavaScript中也可以实现私有属性，而且JavaScript也能像C++和Java一样支持基于类的继承方法。为了展示这些是怎样实现的，下面说明如何转换前面使用Vehicle、SportsCar和CementTruck对象的示例，从而使用信息隐藏和继承的新模式。代码清单5-5列出了新的对象定义。代码清单5-5　classicalInheritance.jsfunct...&nbsp;&nbsp;<a href='http://www.blogjava.net/aoneany/articles/195574.html'>阅读全文</a><img src ="http://www.blogjava.net/aoneany/aggbug/195574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-04-24 14:29 <a href="http://www.blogjava.net/aoneany/articles/195574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中基于类的继承</title><link>http://www.blogjava.net/aoneany/articles/195569.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 24 Apr 2008 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/195569.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/195569.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/195569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/195569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/195569.html</trackback:ping><description><![CDATA[<p><font style="background-color: #c7edcc">JavaScript中基于prototype的继承机制可以很好地工作，但是对于一些已经习惯于C++和Java等语言中基于类的继承机制的人来说，JavaScript的prototype继承机制不是一种自然的编程方法。如果你不想用基于prototype的继承，而想用一种基于类的继承方法，那就继续读下去吧。<br />
Netscape的Bob Clary[4]也提出了一个方法，它可以使一个对象使用一个通用的脚本从另一个对象继承属性和函数。这个脚本只是将&#8220;父&#8221;对象的属性和函数简单地复制到&#8220;子&#8221;对象。为此，我们将说明如何对脚本稍加修改，从而只是将子对象中不存在的属性和函数复制到子对象；这样一来，子对象中的函数就能覆盖父对象的函数。在两个对象之间创建继承关系的通用函数如下：<br />
function createInheritance(parent, child) {<br />
&nbsp;&nbsp;&nbsp; var property;<br />
&nbsp;&nbsp;&nbsp; for(property in parent) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!child[property]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; child[property] = parent[property];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
createInheritance函数有两个参数，父对象和子对象。这个函数只是迭代处理父对象的所有成员（成员就是属性或函数），如果某个成员在子对象中不存在，则复制到子对象。<br />
使用createInheritance函数相当简单：首先创建子对象的一个实例，然后使用createInheritance函数，为它传递子对象以及父对象的一个实例，如下：<br />
var child = new Child();<br />
createInheritance(new Parent(), child);<br />
父对象中有而子对象中没有的所有属性和方法将复制到子对象。</font><br />
</p>
<p>引用:<a href="http://book.csdn.net/bookfiles/11/100117056.shtml" target="_blank">http://book.csdn.net/bookfiles/11/100117056.shtml</a></p>
<img src ="http://www.blogjava.net/aoneany/aggbug/195569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-04-24 14:21 <a href="http://www.blogjava.net/aoneany/articles/195569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript私有属性和使用JavaScript的信息隐藏 </title><link>http://www.blogjava.net/aoneany/articles/195564.html</link><dc:creator>沙漠中的鱼</dc:creator><author>沙漠中的鱼</author><pubDate>Thu, 24 Apr 2008 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/aoneany/articles/195564.html</guid><wfw:comment>http://www.blogjava.net/aoneany/comments/195564.html</wfw:comment><comments>http://www.blogjava.net/aoneany/articles/195564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aoneany/comments/commentRss/195564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aoneany/services/trackbacks/195564.html</trackback:ping><description><![CDATA[<p><font style="background-color: #c7edcc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 铁杆的面向对象设计支持者会注意到，当使用prototype方法向JavaScript对象增加属性和函数时，所增加的属性和函数都是公用的，所有其他对象都能访问。对于函数来说，这通常没有问题，因为大多数函数都确实应当提供给外部客户。但是对于属性，面向对象设计的支持者就会指出，公有属性违反了信息隐藏的概念，对象的属性应当是私有的，因此外部客户不能直接访问。外部客户只能通过公用可用的函数来访问对象的私有属性。</font></p>
<p><font style="background-color: #c7edcc">对于JavaScript，同样有可能创建外部客户不能访问的私有属性，而只能通过对象的（公用）方法来访问，但这一点很少有人知道。Douglas Crockford[3]提出了一种在JavaScript中创建私有属性的方法。这种方法非常简单，总结如下：</font></p>
<p><font style="background-color: #c7edcc">l&nbsp;&nbsp;&nbsp; 私有属性可以在构造函数中使用var关键字定义。</font></p>
<p><font style="background-color: #c7edcc">l&nbsp;&nbsp;&nbsp; 私有属性只能由特权函数（privileged function）公用访问。特权函数就是在构造函数中使用this关键字定义的函数。外部客户可以访问特权函数，而且特权函数可以访问对象的私有属性。</font></p>
<p><font style="background-color: #c7edcc">下面来考虑前一个示例中的Vehicle类。假设你想让wheelCount和curbWeightIn- Pounds属性是私有的，并只能通过公用方法访问。新的Vehicle对象如代码清单5-4所示。</font></p>
<p><font style="background-color: #c7edcc">代码清单5-4&nbsp; 重写后的Vehicle对象</font></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_19_628_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_628_Open_Text.style.display='none'; Codehighlighter1_19_628_Closed_Image.style.display='inline'; Codehighlighter1_19_628_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_19_628_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_19_628_Closed_Text.style.display='none'; Codehighlighter1_19_628_Open_Image.style.display='inline'; Codehighlighter1_19_628_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;Vehicle()&nbsp;</span><span id="Codehighlighter1_19_628_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_19_628_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<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;wheelCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<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;curbWeightInPounds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4000</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_119_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_119_152_Open_Text.style.display='none'; Codehighlighter1_119_152_Closed_Image.style.display='inline'; Codehighlighter1_119_152_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_119_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_119_152_Closed_Text.style.display='none'; Codehighlighter1_119_152_Open_Image.style.display='inline'; Codehighlighter1_119_152_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">.getWheelCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="Codehighlighter1_119_152_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_119_152_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;wheelCount;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_196_230_Open_Image" onclick="this.style.display='none'; Codehighlighter1_196_230_Open_Text.style.display='none'; Codehighlighter1_196_230_Closed_Image.style.display='inline'; Codehighlighter1_196_230_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_196_230_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_196_230_Closed_Text.style.display='none'; Codehighlighter1_196_230_Open_Image.style.display='inline'; Codehighlighter1_196_230_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">.setWheelCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(count)&nbsp;</span><span id="Codehighlighter1_196_230_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_196_230_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wheelCount&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;count;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_277_318_Open_Image" onclick="this.style.display='none'; Codehighlighter1_277_318_Open_Text.style.display='none'; Codehighlighter1_277_318_Closed_Image.style.display='inline'; Codehighlighter1_277_318_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_277_318_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_277_318_Closed_Text.style.display='none'; Codehighlighter1_277_318_Open_Image.style.display='inline'; Codehighlighter1_277_318_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">.getCurbWeightInPounds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="Codehighlighter1_277_318_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_277_318_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;curbWeightInPounds;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_371_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_414_Open_Text.style.display='none'; Codehighlighter1_371_414_Closed_Image.style.display='inline'; Codehighlighter1_371_414_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_371_414_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_371_414_Closed_Text.style.display='none'; Codehighlighter1_371_414_Open_Image.style.display='inline'; Codehighlighter1_371_414_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">.setCurbWeightInPounds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(weight)&nbsp;</span><span id="Codehighlighter1_371_414_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_371_414_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curbWeightInPounds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;weight;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_446_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_446_520_Open_Text.style.display='none'; Codehighlighter1_446_520_Closed_Image.style.display='inline'; Codehighlighter1_446_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_446_520_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_446_520_Closed_Text.style.display='none'; Codehighlighter1_446_520_Open_Image.style.display='inline'; Codehighlighter1_446_520_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">.refuel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="Codehighlighter1_446_520_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_446_520_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Refueling&nbsp;Vehicle&nbsp;with&nbsp;regular&nbsp;87&nbsp;octane&nbsp;gasoline</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_555_626_Open_Image" onclick="this.style.display='none'; Codehighlighter1_555_626_Open_Text.style.display='none'; Codehighlighter1_555_626_Closed_Image.style.display='inline'; Codehighlighter1_555_626_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_555_626_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_555_626_Closed_Text.style.display='none'; Codehighlighter1_555_626_Open_Image.style.display='inline'; Codehighlighter1_555_626_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">.mainTasks&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="Codehighlighter1_555_626_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_555_626_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Driving&nbsp;to&nbsp;work,&nbsp;school,&nbsp;and&nbsp;the&nbsp;grocery&nbsp;store</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>&nbsp;</p>
<p><font style="background-color: #c7edcc">注意，wheelCount和curbWeightInPounds属性都在构造函数中使用var关键字定义，这就使得这两个属性是私有属性。属性不再是公用的，如果想通过点记法访问wheelCount属性的值，如下：</font></p>
<p><font style="background-color: #c7edcc">var numberOfWheels = vehicle.wheelCount;</font></p>
<p><font style="background-color: #c7edcc">就会返回undefined，而不是wheelCount实际的值。</font></p>
<p><font style="background-color: #c7edcc">由于属性现在是私有的，因此需要提供能访问这些属性的公用函数。getWheelCount、setWheelCount、getCurbWeightInPounds和setCurbWeightInPounds函数就是作此使用的。现在Vehicle对象可以保证只能通过公用函数访问私有属性，因此满足了信息隐藏的</font></p>
<p><br />
&nbsp;</p>
<p>引用:<font style="background-color: #c7edcc">http://book.csdn.net/bookfiles/11/100117056.shtml</font></p>
<img src ="http://www.blogjava.net/aoneany/aggbug/195564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aoneany/" target="_blank">沙漠中的鱼</a> 2008-04-24 14:04 <a href="http://www.blogjava.net/aoneany/articles/195564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>