﻿<?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>博客园-Truly</title><link>http://www.cnblogs.com/Truly/</link><description>写精彩代码  品暇逸人生
</description><language>zh-cn</language><lastBuildDate>Fri, 29 Aug 2008 07:14:01 GMT</lastBuildDate><pubDate>Fri, 29 Aug 2008 07:14:01 GMT</pubDate><ttl>60</ttl><item><title>继续完善SandCastle</title><link>http://www.cnblogs.com/Truly/archive/2007/08/09/849856.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Thu, 09 Aug 2007 12:56:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/08/09/849856.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/849856.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/08/09/849856.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/849856.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/849856.html</trackback:ping><description><![CDATA[<span style="COLOR: #000000">作者：<a href="http://truly.cnblogs.com/"><font color=#4371a6>Truly</font></a><br>日期：2007.8.8<br></span><br>今天抽空继续调整了SandCastle的部分代码，现在可以初步看到一些jscript格式的说明文档了，不过还是不很完美，由于没有SandCastle的源码，极大的影响了调试修改的过程。下面是生成的文档的一个抓图，大家可以通过点击<a href="http://www.cnblogs.com/Files/Truly/MicrosoftAjaxDoc.rar" target=_blank>这里</a>查看我生成的文档。<br><br><img height=586 alt="" src="http://www.cnblogs.com/images/cnblogs_com/truly/102302/o_scriptdoc.jpg" width=548 border=0><br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Bootstrapping&nbsp;the&nbsp;Sys&nbsp;namespace.&nbsp;Can't&nbsp;use&nbsp;registerNamespace&nbsp;here&nbsp;as&nbsp;its&nbsp;code&nbsp;uses&nbsp;some&nbsp;of&nbsp;the&nbsp;private</span><span style="COLOR: #008000"><br>//</span><span style="COLOR: #008000">&nbsp;variables&nbsp;that&nbsp;moved&nbsp;from&nbsp;the&nbsp;global&nbsp;namespace&nbsp;onto&nbsp;Sys.</span><span style="COLOR: #008000"><br>//</span><span style="COLOR: #008000">&nbsp;Changes&nbsp;to&nbsp;registerNamespace&nbsp;should&nbsp;be&nbsp;checked&nbsp;against&nbsp;this&nbsp;bootstrapping&nbsp;code&nbsp;to&nbsp;keep&nbsp;them&nbsp;in&nbsp;sync.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">window.Sys&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;__namespace:&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;__typeName:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sys</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;getName:&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Sys</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;},<br>&nbsp;&nbsp;&nbsp;&nbsp;__upperCaseTypes:&nbsp;{}<br>};<br>Sys.__rootNamespaces&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;[Sys];<br>Sys.__registeredTypes&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{};<br><br>Sys.IDisposable&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Sys$IDisposable()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;Error.notImplemented();<br>}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Sys$IDisposable$dispose()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;Error.notImplemented();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>Sys.IDisposable.prototype&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dispose:&nbsp;Sys$IDisposable$dispose<br>}<br>Sys.IDisposable.registerInterface('Sys.IDisposable');<br>Sys.StringBuilder&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Sys$StringBuilder(initialText)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">/&nbsp;&lt;summary&nbsp;locid="M:Sys.StringBuilder.#ctor"&nbsp;/&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">/&nbsp;&lt;param&nbsp;name="initialText"&nbsp;optional="true"&nbsp;mayBeNull="true"&nbsp;locid="Param:Sys.StringBuilder.#ctor.initialText"&gt;&lt;/param&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Function._validateParams(arguments,&nbsp;[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">initialText</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;mayBeNull:&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;optional:&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">}<br>&nbsp;&nbsp;&nbsp;&nbsp;]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(e)&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;e;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">._parts&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(initialText)&nbsp;</span><span style="COLOR: #000000">!==</span><span style="COLOR: #000000">&nbsp;'undefined'&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;initialText&nbsp;</span><span style="COLOR: #000000">!==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;initialText&nbsp;</span><span style="COLOR: #000000">!==</span><span style="COLOR: #000000">&nbsp;'')&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[initialText.toString()]&nbsp;:&nbsp;[];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">._value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">._len&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<br>上面是Sys的部分代码，看一下生成的文档：<br><img height=767 alt="" src="http://www.cnblogs.com/images/cnblogs_com/truly/102302/o_scriptDoc2.JPG" width=608 border=0><br><br>抓图3：<br><img height=991 alt="" src="http://www.cnblogs.com/images/cnblogs_com/truly/102302/o_scriptDoc3.JPG" width=628 border=0><br><br><strong>说明</strong>：今天继续修改SandCastle组件并调整了生成的配置，最终获得了上面的js文档。<br><br>通过SandCastle我们可以生成JavaScript和.NET代码的注释文档，风格有好几种，而且现在的CTP版本已经增强了很多自定义的功能。<br><br>本文仍然是以MicrosoftAjax.js为文档，对于自己编写的js也可以利用ScriptDoc和SandCastle来生成文档。<br><br>today's update(August 9, 2007): fixed the format of class and method,etc. and added a JavaScriptDeclarationSyntaxGenerator class into the SyntaxComponents, then you can set sandcastle.config to&nbsp;generate a&nbsp;javascript document using this template.<br><br>here's&nbsp;some shots:<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/truly/102302/scriptdoc4.jpg" border=0><br><br><img src="http://www.cnblogs.com/images/cnblogs_com/truly/102302/scriptdoc5.jpg" border=0><br><br>Now its format is&nbsp;very close&nbsp;the MS script reference.<br><br>to be continue... 
<img src ="http://www.cnblogs.com/Truly/aggbug/849856.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41953/" target="_blank">[新闻]Mac OS X 10.5.5 Build 9F23 测试版和 Safari 4 预览版</a>]]></description></item><item><title>使用SandCastle和ScriptDoc创建JavaScript文档</title><link>http://www.cnblogs.com/Truly/archive/2007/08/08/847945.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Wed, 08 Aug 2007 07:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/08/08/847945.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/847945.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/08/08/847945.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/847945.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/847945.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #000000">作者：<a href="http://truly.cnblogs.com/"><font color=#4371a6>Truly</font></a><br>日期：2007.8.8<br></span><br>首先我们要遵循JavaScript注释规范，详见<a href="http://www.codeplex.com/scriptdoc" target=_blank>ScriptDoc</a>和<br>&nbsp;&nbsp;&nbsp; <a href="http://weblogs.asp.net/bleroy/archive/2007/04/23/the-format-for-javascript-doc-comments.aspx">http://weblogs.asp.net/bleroy/archive/2007/04/23/the-format-for-javascript-doc-comments.aspx</a><br><br>下面是SandCastle的一些相关站点&nbsp;&nbsp;&nbsp;&nbsp;<br><a href="http://blogs.msdn.com/sandcastle/">http://blogs.msdn.com/sandcastle/</a><br>&nbsp;&nbsp;&nbsp; <br>Sandcastle June CTP 的下载地址<br><a href="http://www.microsoft.com/downloads/thankyou.aspx?familyId=e82ea71d-da89-42ee-a715-696e3a4873b2&amp;displayLang=en">http://www.microsoft.com/downloads/thankyou.aspx?familyId=e82ea71d-da89-42ee-a715-696e3a4873b2&amp;displayLang=en</a><br><br><br>都下载安装好，运行<a href="http://www.codeplex.com/scriptdoc" target=_blank>ScriptDoc</a>则可以在Output目录中找到生成的MicrosoftAjax.org和MicrosoftAjax.xml，注意codeplex上面的版本是对应1.0.0.0版本的Asp.net Ajax框架，而现在ms官方站点上面的版本是1.0.61025.0，所以可能部分代码有点问题。假设你可以正确生成MicrosoftAjax.org和MicrosoftAjax.xml，如果不能正确生成的，请到<a href="http://www.codeplex.com/scriptdoc" target=_blank>ScriptDoc</a>这里下载，我们今天要使用的是MicrosoftAjax.org。<br><br>由于官方的SandCastle暂时还不能完美的支持<a href="http://www.codeplex.com/scriptdoc" target=_blank>ScriptDoc</a>，这里我简单做了一个修正，但是产生的文档跟我们的期望还是有点差距的，等我进一步完善后，再贴出补丁包。<br><br>暂时可以使用下面补丁进行预览<br><br>我制作的补丁包<a href="http://www.cnblogs.com/Files/Truly/Sandcastle.rar"><font color=#002c99>Sandcastle.rar</font></a><br><br>执行说明：1.首先需要安装好<a href="http://blogs.msdn.com/sandcastle/" target=_blank>SandCastle</a>，上面已经给出下载地址。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.然后将上面的补丁包覆盖过去，运行Example中的runme.bat，等待片刻即可。<br><br>说明：我修改了<a href="http://blogs.msdn.com/sandcastle/" target=_blank>SandCastle</a>的一个SyntaxComponents组件，避免了错误报出，Exapmle\Truly\目录中的MicrosoftAjax.org即是用<a href="http://www.codeplex.com/scriptdoc" target=_blank>ScriptDoc</a>导出的MicrosoftAjax.js文件的注释文档。<br><br><strong>小节</strong>：SandCastle组件大量使用反射，以及ASP.NET AJAX实现的反射机制，都值得我们深入研究。<br><br>资源：<br><a href="http://blog.csdn.net/hustorochi/archive/2007/07/20/1700449.aspx">http://blog.csdn.net/hustorochi/archive/2007/07/20/1700449.aspx</a>&nbsp;文中详细讲解了<a href="http://blogs.msdn.com/sandcastle/" target=_blank>SandCastle</a>和Sandcastle Help File Builder等的使用。<br><a href="http://blogs.msdn.com/sandcastle/">http://blogs.msdn.com/sandcastle/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SandCastle<br><a href="http://www.codeplex.com/scriptdoc">http://www.codeplex.com/scriptdoc</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ScriptDoc<br></p>
<p>这里我把一个生成好的文档放上来，先<a href="http://www.cnblogs.com/Files/Truly/MicrosoftAjaxDoc.rar">预览</a>一下，有待完善，需要重新制作模版<br>这里是原始的MicrosoftAjax.js文件：<a href="http://www.cnblogs.com/Files/Truly/MicrosoftAjaxDebugJS.rar">http://www.cnblogs.com/Files/Truly/MicrosoftAjaxDebugJS.rar</a>，也可以到ASP.NET Ajax官方站点ajax.asp.net下载<br></p>
<img src ="http://www.cnblogs.com/Truly/aggbug/847945.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41952/" target="_blank">[新闻]十月上市 Google手机HTC Dream官方图现</a>]]></description></item><item><title>关于.NET的异常处理的几个误区</title><link>http://www.cnblogs.com/Truly/archive/2007/08/05/843837.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Sun, 05 Aug 2007 08:21:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/08/05/843837.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/843837.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/08/05/843837.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/843837.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/843837.html</trackback:ping><description><![CDATA[<p><span style="COLOR: #000000">作者：<a href="http://truly.cnblogs.com/"><font color=#4371a6>Truly</font></a><br>日期：2007.8.5<br></span><br>很久前就想写这么一篇文章，因为很多人使用.Net多年之后还是对异常处理一知半解的，有很多误解，本文将讲解三个常见误解，一个是catch的使用方法是否正确，另外两个是try/catch的性能损失问题。<br><br>有些人认为下面代码就是一个catch的错误用法:</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"><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;e;<br>}</span></div>
<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"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetAllCount2()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;openDB();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(SqlException&nbsp;sex)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;sex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;ex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetAllCount()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;openDB();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;这里也可能是微软企业类库等</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;openDB()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>假设我们有一个公用方法叫openDB(),而很多方法中调用它，当数据库打开失败的时候，对于调用GetAllCount方法，异常将定位于conn.Open而如果调用GetAllCount2，那么异常定位于throw sex的位置，同时堆栈信息也有所不同，可以更快捷的找到调用方法的位置，也可在此位置进行一些错误恢复处理。尤其是我们编写一些底层类库的时候，比如Framework类库从不会把异常代码定位到Framework类库内部的某个方法上面。但是需要注意的是我们尽量避免捕获异常而不返回，例如
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(){}</span></div>
<p>这样的使用就是典型的错误使用了，因为对于Framework来讲，任何时候系统都可能抛出一个<strong>StackOverflowException</strong>或者<strong>OutOfMemoryExcetpion</strong>而上面这段代码则隐藏了这些异常，有时候则导致一些严重的问题。<br><br><br><strong>对于异常处理，在性能上有2点注意<br><br>第一点</strong>，在使用<strong>try/catch</strong>时，如果不发生异常，那么几乎可以忽略性能的损失。</p>
<p>关于这一点，这里我们进行一些深入分析，对此比较了解的可以跳过本节。首先，让我们先看一下<strong>try/catch</strong>的IL表现。我们有2个方法，一个使用<strong>try/catch</strong>，而另一个未做任何处理：</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"><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Test1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&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">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Test2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>}</span></div>
<p>使用ILDasm工具查看，IL代码分别如下：（这里之所以引入IL，是因为IL是比较接近机器汇编，所以在IL中我们可以更清楚的了解代码的执行情况，对IL没有兴趣的可以跳过此节）<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">.method&nbsp;private&nbsp;hidebysig&nbsp;static&nbsp;int32&nbsp;&nbsp;Test1(int32&nbsp;a,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int32&nbsp;b)&nbsp;cil&nbsp;managed<br>{<br>&nbsp;&nbsp;//&nbsp;代码大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30&nbsp;(0x1e)<br>&nbsp;&nbsp;.maxstack&nbsp;&nbsp;2<br>&nbsp;&nbsp;.locals&nbsp;init&nbsp;([0]&nbsp;int32&nbsp;CS$1$0000,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;bool&nbsp;CS$4$0001)<br>&nbsp;&nbsp;IL_0000:&nbsp;&nbsp;nop<br>&nbsp;&nbsp;.try<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0001:&nbsp;&nbsp;nop<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0002:&nbsp;&nbsp;ldarg.0<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0003:&nbsp;&nbsp;ldarg.1<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0004:&nbsp;&nbsp;cgt<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0006:&nbsp;&nbsp;ldc.i4.0<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0007:&nbsp;&nbsp;ceq<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0009:&nbsp;&nbsp;stloc.1<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_000a:&nbsp;&nbsp;ldloc.1<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_000b:&nbsp;&nbsp;brtrue.s&nbsp;&nbsp;&nbsp;IL_0011<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_000d:&nbsp;&nbsp;ldarg.0<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_000e:&nbsp;&nbsp;stloc.0<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">IL_000f:&nbsp;&nbsp;leave.s&nbsp;&nbsp;&nbsp;&nbsp;IL_001b<br></span>&nbsp;&nbsp;&nbsp;&nbsp;IL_0011:&nbsp;&nbsp;ldarg.1<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0012:&nbsp;&nbsp;stloc.0<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">IL_0013:&nbsp;&nbsp;leave.s&nbsp;&nbsp;&nbsp;&nbsp;IL_001b<br></span>&nbsp;&nbsp;}&nbsp;&nbsp;//&nbsp;end&nbsp;.try<br>&nbsp;&nbsp;catch&nbsp;[mscorlib]System.Object&nbsp;<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0015:&nbsp;&nbsp;pop<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0016:&nbsp;&nbsp;nop<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0017:&nbsp;&nbsp;ldc.i4.m1<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0018:&nbsp;&nbsp;stloc.0<br>&nbsp;&nbsp;&nbsp;&nbsp;IL_0019:&nbsp;&nbsp;leave.s&nbsp;&nbsp;&nbsp;&nbsp;IL_001b<br>&nbsp;&nbsp;}&nbsp;&nbsp;//&nbsp;end&nbsp;handler<br><span style="COLOR: red">&nbsp;&nbsp;IL_001b:&nbsp;&nbsp;nop<br>&nbsp;&nbsp;IL_001c:&nbsp;&nbsp;ldloc.0<br>&nbsp;&nbsp;IL_001d:&nbsp;&nbsp;ret<br></span>}&nbsp;//&nbsp;end&nbsp;of&nbsp;method&nbsp;Program::Test1</div>
<p><br>Test2</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">.method&nbsp;private&nbsp;hidebysig&nbsp;static&nbsp;int32&nbsp;&nbsp;Test2(int32&nbsp;a,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int32&nbsp;b)&nbsp;cil&nbsp;managed<br>{<br>&nbsp;&nbsp;//&nbsp;代码大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;(0x16)<br>&nbsp;&nbsp;.maxstack&nbsp;&nbsp;2<br>&nbsp;&nbsp;.locals&nbsp;init&nbsp;([0]&nbsp;int32&nbsp;CS$1$0000,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;bool&nbsp;CS$4$0001)<br>&nbsp;&nbsp;IL_0000:&nbsp;&nbsp;nop<br>&nbsp;&nbsp;IL_0001:&nbsp;&nbsp;ldarg.0<br>&nbsp;&nbsp;IL_0002:&nbsp;&nbsp;ldarg.1<br>&nbsp;&nbsp;IL_0003:&nbsp;&nbsp;cgt<br>&nbsp;&nbsp;IL_0005:&nbsp;&nbsp;ldc.i4.0<br>&nbsp;&nbsp;IL_0006:&nbsp;&nbsp;ceq<br>&nbsp;&nbsp;IL_0008:&nbsp;&nbsp;stloc.1<br>&nbsp;&nbsp;IL_0009:&nbsp;&nbsp;ldloc.1<br>&nbsp;&nbsp;IL_000a:&nbsp;&nbsp;brtrue.s&nbsp;&nbsp;&nbsp;IL_0010<br>&nbsp;&nbsp;IL_000c:&nbsp;&nbsp;ldarg.0<br>&nbsp;&nbsp;IL_000d:&nbsp;&nbsp;stloc.0<br>&nbsp;<span style="COLOR: red">&nbsp;IL_000e:&nbsp;&nbsp;br.s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IL_0014<br></span>&nbsp;&nbsp;IL_0010:&nbsp;&nbsp;ldarg.1<br>&nbsp;&nbsp;IL_0011:&nbsp;&nbsp;stloc.0<br><span style="COLOR: red">&nbsp;&nbsp;IL_0012:&nbsp;&nbsp;br.s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IL_0014<br>&nbsp;&nbsp;IL_0014:&nbsp;&nbsp;ldloc.0<br>&nbsp;&nbsp;IL_0015:&nbsp;&nbsp;ret<br></span>}&nbsp;//&nbsp;end&nbsp;of&nbsp;method&nbsp;Program::Test2</div>
<p>这里我们只需关注红字高亮的几行即可。此处我们只关心try区块，即未发生异常的时候，对于Test1来讲，IL代码多出了8个字节来保存catch的处理代码，这一点对性能和资源几乎是微不足道的。<br>我们看到当Test1执行到<span style="COLOR: red">IL_000f</span>或者<span style="COLOR: red">IL_0013</span>的时候，将数据出栈并使用leave.s退出try区块转向<span style="COLOR: red">IL_001b</span>地址，然后将数据入栈并返回。</p>
<p>对于Test2来讲，执行到<span style="COLOR: red">IL_000e</span>或者<span style="COLOR: red">IL_0012</span>的时候, 直接退出，并将数据入栈然后返回。<br><br>这里对几个关键指令简单介绍一下</p>
<p><strong>nop</strong>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;do noting<br><strong>stloc.0</strong>&nbsp;&nbsp;Pop value from stack into local variable 0.<br><strong>ldloc.0</strong>&nbsp;&nbsp;Load local variable 0 onto stack.<br><strong>br.s target</strong>&nbsp;branch to target, short form<br><strong>leave.s target</strong>&nbsp;Exit a protected region of code, short form</p>
<p>下面我们看代码的实际运行情况，新建一个控制台Console程序，加入下面代码：</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=Code_Closed_Image_161800 onclick="this.style.display='none'; Code_Closed_Text_161800.style.display='none'; Code_Open_Image_161800.style.display='inline'; Code_Open_Text_161800.style.display='inline';" height=16 src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_161800 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_161800.style.display='none'; Code_Closed_Image_161800.style.display='inline'; Code_Closed_Text_161800.style.display='inline';" height=16 src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_161800 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">&nbsp;&nbsp; 点击左边图标展开代码</span><span id=Code_Open_Text_161800 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;args)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;times&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1000000</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">我们将结果放大100，0000倍</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;l1,&nbsp;l2,l3,l4,&nbsp;s1,&nbsp;s2;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Press&nbsp;any&nbsp;key&nbsp;to&nbsp;continue<img src="http://www.cnblogs.com/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;Console.Read();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DateTime.Now.Ticks;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;times;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test2(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DateTime.Now.Ticks;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;l2&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;l1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">time&nbsp;spent:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s1);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DateTime.Now.Ticks;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;times;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test1(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l4&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DateTime.Now.Ticks;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;l4&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;l3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">time&nbsp;spent:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">difference:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;(s2&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;s1)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;rate:</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">float</span><span style="COLOR: #000000">)(s2&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;s1)&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;s1&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;times);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Test1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;模拟长时操纵</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&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">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Test2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;模拟长时操纵</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>}</span></span></div>
<p>运行后可以看到代码的差异，通常在0.0001%的差别以内。<br><br><strong>第二点</strong>，如果发生异常，那么引发或处理异常时，将使用大量的系统资源和执行时间。引发异常只是为了处理确实异常的情况，而不是为了处理可预知的事件或流控制。例如，如果方法参数无效，而应用程序需要使用有效的参数调用方法，则可以引发异常。无效的方法参数意味着出现了异常情况。相反，用户偶尔会输入无效数据，这是可以预见的，因此如果用户输入无效，则不要引发异常。在这种情况下，请提供重试机制以便用户输入有效输入。 </p>
<p>我们经常需要将一个字符串转换为int，比如将Request.QueryString["id"]这样的字符串转换为int，在asp.net 1.x时代，我们常使用下列方式</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"><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Int32.Parse(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(){}</span></div>
<p>这样的后果是如果出现转换异常，你将不得不牺牲大量的系统资源来处理异常，即使你没有编写任何异常处理代码。</p>
<p>当然你也可以编写大量的代码来检测和转换字符串来替代<strong>try/catch</strong>方式，而从asp.net 2.0以后，框架将这个检测转换过程封装到Int32.TryParse方法中，再也不用蹩脚的<strong>try/catch</strong>来处理了。<br></p>
<p>还要补充一点，就是finally中的代码是始终保证运行的，所以留给大家一个问题，下面代码执行后a的值是多少：</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"><span style="COLOR: #000000"><font color=#0000ff>int </font>a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;<font color=#0000ff>int </font>i = Int32.Parse("s")</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp; <span style="COLOR: #0000ff">return</span>;<br>}<br></span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br>}</span></div>
<p><br><br><strong>小节</strong>：本文主要对异常处理的3个常见误解进行了纠正。撰稿仓促，如有疏漏，烦请指出。</p>
<p><strong>参考文献</strong>：<br><br><a href="http://msdn2.microsoft.com/zh-cn/library/system.exception(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/system.exception(VS.80).aspx</a><br><a href="http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconexceptionsoverview.asp">http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconexceptionsoverview.asp</a><br>《CIL Instruction Set Specification》<br>《Applied Microsoft.NET Framework Programming》<br></p>
<img src ="http://www.cnblogs.com/Truly/aggbug/843837.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41951/" target="_blank">[新闻]2008年8月29日IT博客精选</a>]]></description></item><item><title>JavaScript实现自定义事件</title><link>http://www.cnblogs.com/Truly/archive/2007/08/03/842384.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Fri, 03 Aug 2007 14:31:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/08/03/842384.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/842384.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/08/03/842384.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/842384.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/842384.html</trackback:ping><description><![CDATA[<span style="COLOR: #000000">作者：<a href="http://truly.cnblogs.com/"><font color=#4371a6>Truly</font></a><br>日期：2007.8.3<br><br><a href="http://www.cnblogs.com/Truly/archive/2007/08/03/842291.html" target=_blank>上篇文章</a>介绍了属性，或者说是闭包，本文讨论它的一个实际应用。<br><br>由于将变量封装为方法，这样可以更好的保护私有变量，同时，我们也可以方便的监视它值的变化。<br><br>先看如下代码，部分代码来自于《Action in Ajax》
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Test5</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='test'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Click&nbsp;Me!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=button&nbsp;</span><span style="COLOR: #ff0000">onclick</span><span style="COLOR: #0000ff">="document.getElementById('test').value&nbsp;=&nbsp;2"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">='set'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(value,&nbsp;domEL){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;domEL;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;value;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.onclick</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.clickHandler;<br>}<br><br>Element.prototype.clickHandler</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.buttonObj;<br>alert(buttonObj.value);<br>}<br><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;document.getElementById('test'));<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>运行这个页面，点击ClickMe的时候返回来我们初始化的值1，而set之后，再次点击，却没有得到期望的值2。<br><br>我们使用属性方法来改造上面的代码，得到：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Test6</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='test'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Click&nbsp;Me!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=button&nbsp;</span><span style="COLOR: #ff0000">onclick</span><span style="COLOR: #0000ff">="document.getElementById('test').setValue(2)"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">='set'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(value,&nbsp;domEL){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;domEL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.getValue&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;value;&nbsp;};<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.setValue&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(newValue)&nbsp;{&nbsp;value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;newValue;&nbsp;};<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.value&nbsp;=&nbsp;value;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.onclick</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.clickHandler;<br>}<br><br>Element.prototype.clickHandler</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.buttonObj;&nbsp;&nbsp;&nbsp;&nbsp;<br>alert(buttonObj.domEl.getValue());<br>}<br><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;document.getElementById('test'));<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>打开页面，点击Click Me，然后点击set按钮，再次点击Click Me，这次我们得到了正确的结果，方法的好处就在于此。<br><br>有了上面的基础，我们就很方便的实现对DOM元素的onValueChange事件进行监听：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Test7</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='test'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Click&nbsp;Me!</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=button&nbsp;</span><span style="COLOR: #ff0000">onclick</span><span style="COLOR: #0000ff">="document.getElementById('test').setValue(2)"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">='set'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(value,&nbsp;domEL){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;domEL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.getValue&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;value;&nbsp;};<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.setValue&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(newValue)&nbsp;{&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;isChange</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">false</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">||</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;value</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">!=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">newValue;&nbsp;value&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;newValue;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(isChange&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;&amp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.onValueChange)&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.onValueChange();&nbsp;&nbsp;};<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.onclick</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.clickHandler;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.domEl.onValueChange</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.valueChangeHandler;<br>}<br><br>Element.prototype.clickHandler</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.buttonObj;&nbsp;&nbsp;&nbsp;&nbsp;<br>alert(buttonObj.domEl.getValue());<br>}<br>Element.prototype.valueChangeHandler</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;buttonObj&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.buttonObj;<br>alert('value&nbsp;is&nbsp;changed&nbsp;to&nbsp;'</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;buttonObj.domEl.getValue());<br>}<br><br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Element(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,&nbsp;document.getElementById('test'));<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>这样当我们点击set按钮改变dom元素value的时候，则激发其onValueChange事件，并且此方法可以应用到所有的DOM元素上，更加方便实现MVC模式和Obsever模式。<br><br>同时通过本文的示例，更加清晰的认识了使用属性或者说闭包方式带给我们的好处。<br><br>enjoy code！<br></span><img src ="http://www.cnblogs.com/Truly/aggbug/842384.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41950/" target="_blank">[新闻]微软在华布局农村手机 定位小城镇和打工者</a>]]></description></item><item><title>JavaScript面向对象之属性实现</title><link>http://www.cnblogs.com/Truly/archive/2007/08/03/842291.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Fri, 03 Aug 2007 13:23:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/08/03/842291.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/842291.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/08/03/842291.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/842291.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/842291.html</trackback:ping><description><![CDATA[<font color=#ff0000><span style="COLOR: #000000">作者：<a href="http://truly.cnblogs.com/">Truly</a><br>日期：2007.8.3<br><br>在我前面一篇文章《</span><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.cnblogs.com/Truly/archive/2007/07/24/830013.html"><font color=#4371a6>在JavaScript中使用面向对象</font></a><span style="COLOR: #000000">》中我们介绍了</span><span style="COLOR: #000000">MSDN的一篇文章《</span></font><a href="http://msdn.microsoft.com/msdnmag/issues/07/05/JavaScript/default.aspx?loc=zh"><em>使用面向对象的技术创建高级 Web 应用程序</em></a><span style="COLOR: #000000">》，作者简单介绍了JavaScript面向对象的一些关键技术，但是作者在讲到闭包概念的时候犯了一个明显的错误：&#8220;<span style="COLOR: red">正常情况下，无法从函数以外访问函数内的本地变量。函数退出之后，由于各种实际原因，该本地变量将永远消失</span>&#8221;详见原文。事实上这段描述是错误的。<br><br>请先看如下代码：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Test(abc)<br>{<br></span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.g&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){</span><span style="COLOR: #0000ff">debugger</span><span style="COLOR: #000000">;};<br>}<br><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Test(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>p.g();<br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br>如果你启用了IE的调试功能，并安装了脚本调试器，例如VS，那么你在程序提示调试的时候进入调试，此时你可以醒目的发现abc依然存在，并且完好的保存了正确的值，而并非永远消失。但是这也不是我本文要讨论的重点，只是希望大家以后能够多动手，多实践，像MS ASP.NET AJAX 团队的软件设计工程师都会犯这种错误，更何况诸位呢？<br><br>本文要讨论的是面向对象编程中常用的<strong>属性，</strong>但是在JavaScript中属性则无法像高级编程语言那样可以直接使用，看起来更像<strong>方法</strong>，这种实现方式也有人称之为<strong>闭包</strong>，但本文以<strong>属性</strong>相称。<br><br><strong>属性</strong>是对私有变量的一种保护手段，同时提供了像public变量一样的使用效果，近代的高级编程语言例如C#和Java都支持了属性这一特点。<br><br>我们知道，函数的入口参数被声明为该函数的本地变量，而对于本地变量，像我前面《<a class=postTitle2 id=viewpost1_TitleUrl href="http://www.cnblogs.com/Truly/archive/2007/07/24/830013.html"><font color=#4371a6>在JavaScript中使用面向对象</font></a>》关于全局变量和局部变量中描述的那样，由于其作用域仅限于函数内部，所有无法在外部对其进行访问，例如p.abc不会返回p内部的abc变量。这一点跟高级编程语言完全一致，你无法在类外部访问其private变量，但是我们可以借助public方法来返回私有变量。所以高级编程语言如Java，C#等中属性的作用，就是保护私有变量。像C#这门语言，属性最终会由编译器编译为get_属性名()这样的方法，当我们使用某个属性时，实质上是调用一个方法。<br><br>《<a href="http://msdn.microsoft.com/msdnmag/issues/07/05/JavaScript/default.aspx?loc=zh"><em>使用面向对象的技术创建高级 Web 应用程序</em></a>》的作者认为是由于方法的定义才使局部变量存活下来，这一点是不正确的，具体我们前面已经分析过了，如果你仍有疑问，那么再仔细研究下面的代码：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Person(name,&nbsp;age)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{</span><span style="COLOR: #0000ff">debugger</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;};<br>}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;o&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Person(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>o.getName();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进入调试后发现name=1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Person(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br>t.getName();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进入调试后发现name=2</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">o.getName();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;进入调试后发现name=1,并未受到其它实例的影响</span></div>
<p>对于这个问题，我起初也认为是因为变量有引用才没被销毁，最后证明局部变量在对象销毁前其内部的变量不会销毁。<br><br>同时那篇文章中另外一段也是不准确的：<br><em>注意，这些私有成员与我们期望从 C# 中产生的私有成员略有不同。在 C# 中，类的公用方法可以访问它的私有成员。但在 JavaScript 中，只能通过在其闭包内拥有这些私有成员的方法来访问私有成员（由于这些方法不同于普通的公用方法，它们通常被称为特权方法）。因此，在 Person 的公用方法中，仍然必须通过私有成员的特权访问器方法才能访问私有成员<br></em></p>
<p>关于这一点，他的表述相当模糊，事实上我们可以这样理解：<br><br>在C#中我们可以在类的任何方法中访问类的私有成员变量，<br>而在JavaScript中，只能使用在<strong>function</strong>方式中定义的方法对私有成员访问，而无法在<strong>prototype</strong>方式定义的方法中访问。</p>
<p>如果这样讲你还不能理解的话，那么还可以这样理解，在JavaScript中的私有变量无法在其声明函数外访问，例如：</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"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Person()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;ttt;<br>}<br></span></div>
<p>永远不能在<strong>{}</strong>外部试图访问<strong>ttt</strong>。<br><br>现在我们更加深入的理解了变量作用域在JavaScript中的特点。<br><br>前面讲了高级编程语言中属性的种种好处，又研究了JavaScript对私有变量的保护，那么您对JavaScript中属性的实现应该非常清楚了，这里引用《<a href="http://msdn.microsoft.com/msdnmag/issues/07/05/JavaScript/default.aspx?loc=zh"><em>使用面向对象的技术创建高级 Web 应用程序</em></a>》文中的一段示例代码：</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"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;Person(name,&nbsp;age)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;name;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(newName)&nbsp;{&nbsp;name&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;newName;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.getAge&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;age;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setAge&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(newAge)&nbsp;{&nbsp;age&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;newAge;&nbsp;};<br>}</span></div>
<p>关于属性在实际中的应用及其优点，将在我<a href="http://www.cnblogs.com/Truly/archive/2007/08/03/842384.html" target=_blank>下一篇文章</a>介绍自定义事件中讲解。<br><br><span style="COLOR: red">后记：本来打算在这里讲述如何在JavaScript中实现面向对象中的一些特性，比如用&#8220;属性&#8221;这一现代编程概念体现的对象的封装性：不直接操作类的数据内容，而是通过访问器进行访问，即借助于get和set对私有成员的值进行读写。最后却演变成为一个白马是不是马的哲学讨论，真是汗颜。<br></span></p>
</span>
<img src ="http://www.cnblogs.com/Truly/aggbug/842291.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41950/" target="_blank">[新闻]微软在华布局农村手机 定位小城镇和打工者</a>]]></description></item><item><title>JavaScript随笔一篇</title><link>http://www.cnblogs.com/Truly/archive/2007/07/31/838157.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Tue, 31 Jul 2007 14:17:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/07/31/838157.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/838157.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/07/31/838157.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/838157.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/838157.html</trackback:ping><description><![CDATA[作者：<a href="http://truly.cnblogs.com/"><font color=#0066cc>Truly</font></a><br>日期：2007.7.31<br><br>近期Post了不少Javascript文章，还是收到不少支持，你们的回复是我写下去的动力，谢谢你们！<br><br>刚刚研究了一下<a href="http://www.sina.com.cn/" target=_blank>新浪</a>的<a href="http://finance.sina.com.cn/" target=_blank>财经</a>板块，其中对股票数据的处理真的是跟我的<strong>MVC</strong>模式的文章不谋而合啊。我顺手写了2段代码，大家看看。<br><br><span style="COLOR: red">Stock.html</span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Truly's&nbsp;stock</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">src</span><span style="COLOR: #0000ff">=data.js</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">style</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">/*</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">&nbsp;change_color&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">*/</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>.incolor</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5">color</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">#FF0000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>.decolor</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5">color</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">#008000</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>#itemTickettime<br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;font-size</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">12px</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>span,div</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{</span><span style="COLOR: #ff0000; BACKGROUND-COLOR: #f5f5f5">font-size</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">12px</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}</span><span style="COLOR: #800000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">style</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=vsdata</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=mystock&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">='000001'</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='sh'&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=radio&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">='type'&nbsp;</span><span style="COLOR: #ff0000">checked&nbsp;value</span><span style="COLOR: #0000ff">=1</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">sh</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=radio&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">='type'&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">=2</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">sz<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=button&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">='&nbsp;</span><span style="COLOR: #ff0000">Go&nbsp;'&nbsp;onclick</span><span style="COLOR: #0000ff">='loadMyStockList()'</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">=button&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">='&nbsp;</span><span style="COLOR: #ff0000">Stop&nbsp;'&nbsp;onclick</span><span style="COLOR: #0000ff">='stopFresh()'</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div&nbsp;</span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="tbtb01"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='name'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="itemMarket"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='code'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">&amp;nbsp;&amp;nbsp;</span><span style="COLOR: #000000">昨收</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='s'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #ff0000">&amp;nbsp;&amp;nbsp;</span><span style="COLOR: #000000">今开</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='k'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div&nbsp;</span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="tbtb02"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">h3&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="itemCurrent"</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">="incolor"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">h3</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="fRed01"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="itemcurrprice"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #ff0000">&amp;nbsp;&amp;nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">class</span><span style="COLOR: #0000ff">="fRed01"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="itemDiffpercent"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">span&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="itemTickettime"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">span</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
<br><span style="COLOR: red">Data.js
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;AppConf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Interval_1s:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;Interval_AginReq:</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;url:'http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">hq.sinajs.cn/format=js&amp;func=S_Finance.upconstants.setData();&amp;list='</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>};<br><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;$(id){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;document.getElementById(id);};<br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;$C(nodeName){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;document.createElement(nodeName);};<br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;gt(){</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">($('sh').checked)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;'sh'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">$('mystock').value;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;'sz'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">$('mystock').value;}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;timer;<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;itemCurrent;<br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;loadMyStockList()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;itemCurrent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemCurrent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;fullcode</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gt();<br>&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(timer);<br>&nbsp;&nbsp;&nbsp;&nbsp;timer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;setInterval(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Truly.load_data_script(AppConf.url+gt(),'vsdata');</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;stopFresh()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(timer);<br>}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;jk,zs;<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;currprice,currnum;<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;_A</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(t,c){t.appendChild(c)};<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;fullcode&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'sh600390';<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;Truly&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;load_data_script:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(url,idname)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;h&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getHours();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;m&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getMinutes();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(h&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;(h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;(h&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">))&nbsp;stopFresh();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;obj</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">$(idname);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(obj){obj.parentNode.removeChild(obj);};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;newscript</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">$C(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newscript.type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newscript.src</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">url;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newscript.id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">idname;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_A(document.body,newscript);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;S_Finance</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{};<br>S_Finance.upconstants</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{itemTickettime:</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,servertime:</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,<br>setData:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.itemTickettime</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemTickettime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML;<br>&nbsp;&nbsp;&nbsp;&nbsp;eval(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this.hq_str_symbol&nbsp;=&nbsp;hq_str_</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fullcode);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.hq_str_symbol</span><span style="COLOR: #000000">!=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.hq_str_symbol</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">undefined&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.hq_str_symbol</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">undefined</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.hq_str_symbol</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.chgedary</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Array();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.chgedarylen</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.cacheidx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setValue(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.hq_str_symbol);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.initflag</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">._updata._Bind(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">),AppConf.Interval_AginReq);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setFlash</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(tid)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;_tidColor</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">$(tid).style.color;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){$(tid).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#000000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;},</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){$(tid).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">_tidColor;},</span><span style="COLOR: #000000">600</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){$(tid).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#000000</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;},</span><span style="COLOR: #000000">800</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){$(tid).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">_tidColor;},</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.itemTickettime</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemTickettime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemcurrprice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.fontFamily</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Arial</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemcurrprice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.fontSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">11px</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemDiffpercent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.fontFamily</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Arial</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemDiffpercent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.fontSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">11px</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setFlash(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemCurrent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setFlash(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemcurrprice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.setFlash(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemDiffpercent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>},<br>&nbsp;&nbsp;&nbsp;&nbsp;setValue:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(data)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;dataContent</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">data;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dataContent){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataContent.replace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);dataContent.replace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;dataArray</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataContent.split(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arrayLen</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray.length;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemTickettime</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">30</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">+</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">31</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemCurrent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">code</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">fullcode;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currprice&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(dataArray[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currnum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(dataArray[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemcurrprice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">currprice;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemDiffpercent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Math.round(currnum</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;'</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jk</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dataArray[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jk;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">zs;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dataArray[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">zs)&nbsp;itemCurrent.style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'#FF0000';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dataArray[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">zs)&nbsp;itemCurrent.style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'#</span><span style="COLOR: #000000">000000</span><span style="COLOR: #000000">';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;itemCurrent.style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'#</span><span style="COLOR: #000000">008000</span><span style="COLOR: #000000">';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemcurrprice</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">itemCurrent.style.color;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">itemDiffpercent</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).style.color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">itemCurrent.style.color;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
<p><span style="COLOR: #000000">呵呵，写的很简单就不往首页放了。大家慢慢看，玩股票的兄弟们祝你们都赚到钱，不玩股票的就多研究研究技术。<a href="http://www.cnblogs.com/Files/Truly/stock.rar" target=_blank>这里</a>下载源码。<br></span><br>enjoy code！<br></p>
</span>
<img src ="http://www.cnblogs.com/Truly/aggbug/838157.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41949/" target="_blank">[新闻]暴雪确认《星际争霸2》将不会在08年内发售</a>]]></description></item><item><title>设计模式在JavaScript中的应用(2) -- Observer</title><link>http://www.cnblogs.com/Truly/archive/2007/07/31/838107.html</link><dc:creator>Truly</dc:creator><author>Truly</author><pubDate>Tue, 31 Jul 2007 13:34:00 GMT</pubDate><guid>http://www.cnblogs.com/Truly/archive/2007/07/31/838107.html</guid><wfw:comment>http://www.cnblogs.com/Truly/comments/838107.html</wfw:comment><comments>http://www.cnblogs.com/Truly/archive/2007/07/31/838107.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/Truly/comments/commentRss/838107.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Truly/services/trackbacks/838107.html</trackback:ping><description><![CDATA[作者：<a href="http://truly.cnblogs.com/"><font color=#0066cc>Truly</font></a><br>日期：2007.7.31<br><br>上次我们讨论了Web开发中最重要的设计模式MVC，今天我们要讨论的是Observer模式，与MVC这样的大型设计模式相比，Observer模式则要轻量很多。废话不多说了，进入主题<br><br><strong>Obsever简单应用</strong><br><br>请先看一段代码：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;process&nbsp;array&nbsp;calling&nbsp;after&nbsp;page&nbsp;loaded&nbsp;for&nbsp;page&nbsp;listener.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;PageLoadListener&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Array();&nbsp;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;page&nbsp;listener</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;onDocumentLoaded()<br>{<br>&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;a&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;PageLoadListener)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;&nbsp;PageLoadListener[a]&nbsp;&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;'</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageLoadListener[a]();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Add&nbsp;a&nbsp;listener&nbsp;to&nbsp;current&nbsp;page&nbsp;to&nbsp;run&nbsp;all&nbsp;function&nbsp;on&nbsp;the&nbsp;page.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(document.addEventListener)<br>&nbsp;document.addEventListener('DOMContentLoaded',&nbsp;onDocumentLoaded,&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;&nbsp;<br>&nbsp;window.attachEvent('onload',&nbsp;onDocumentLoaded);&nbsp;<br></span></div>
<br>而在另外一个js中我们定义：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">PageLoadListener.push(domLoaded);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;push&nbsp;the&nbsp;domLoaded&nbsp;function&nbsp;into&nbsp;the&nbsp;listener&nbsp;array.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;a&nbsp;method&nbsp;need&nbsp;to&nbsp;call&nbsp;after&nbsp;page&nbsp;is&nbsp;loaded</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;domLoaded()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;alert('document&nbsp;loaded');<br>}</span></div>
<br>通常我们经常要处理window.onload事件，例如使用下面代码来指定onload事件
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">window.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">aFunction<br></span></div>
<br>&nbsp;&nbsp;&nbsp; 而当我们这样的方式声明的时候，很可能会覆盖已经定义过的window.onload事件，或者我们这里还有很多事件要在onload执行，那么如何应对这种情况呢？Observer模式恰好可以用来处理这种情况。首先我们需要为页面定义了一个监听器，检测页面中需要处理的事件，然后定义一个全局的监听器数组。这样需要处理的事件都可以注册到这个监听器数组中，然后统一进行调用。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 如上面代码中的，我们将需要处理的事件名通过下面代码<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: brea