﻿<?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>IT博客-A JavaScript Fancier-随笔分类-javascript技巧总结</title><link>http://www.cnitblog.com/yemoo/category/3110.html</link><description>伟大的javascript技术研究中...</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 04:27:19 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 04:27:19 GMT</pubDate><ttl>60</ttl><item><title>利用arguments.callee实现匿名函数的递归</title><link>http://www.cnitblog.com/yemoo/archive/2008/07/10/46532.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Thu, 10 Jul 2008 02:13:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/07/10/46532.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/46532.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/07/10/46532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/46532.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/46532.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>实现递归的算法大家都是很熟悉的，比如一个求0到n的和的递归函数如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;fn</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fn(n</span><span style="COLOR: #000000">-</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;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(fn(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">))</span></div>
当然这是一个很简单的函数，如果在一个很复杂的程序中我们可能只需要调用一次该函数，为了函数的精简我们当然要努力较少函数名的定义，这是很自然会想到用匿名函数来直接执行。但是如果是匿名函数如何实现递归？arguments.callee正好派上用场，他指代的就是当前执行的函数的引用。<br><br><strong>利用匿名函数实现的递归如下：</strong><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(n){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">arguments.callee(n</span><span style="COLOR: #000000">-</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;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;})(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(s)</span></div>
一点小总结，主要是对匿名函数及arguments.calle的一些应用，例子举的不是很恰当，但这些知识在开发中还是有用的，总计起来增强一下自己的记忆。<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><<img src ="http://www.cnitblog.com/yemoo/aggbug/46532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-07-10 10:13 <a href="http://www.cnitblog.com/yemoo/archive/2008/07/10/46532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关onpropertychange事件的一点小发现</title><link>http://www.cnitblog.com/yemoo/archive/2008/06/23/45941.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 23 Jun 2008 05:42:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/06/23/45941.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/45941.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/06/23/45941.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/45941.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/45941.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相信很多web开发朋友都使用过onpropertychange这个事件，虽然是ieOnly但也能帮我们不少忙，可能我们只知道该事件在输入框值发生变化的时候会被立即触发，其实这里还有很多我们小秘密。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先从名字上看onpropertychange上来看，应该是属性改变的时候被触发。做个测试。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="xxx"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="xx"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="this.myprop='xx'"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('xx').attachEvent('onpropertychange',</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(o){alert('ok')});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 执行上面的代码，单击输入框发现也会触发onpropertychange，输入一个值同样也会触发这个事件，这就证明了，只要有属性的值被修改就会触发该事件。<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 第二、既然我们发现了这个特点，那就会有一个问题了：当我们有时在输入框值发生改变时希望执行一个函数操作，但同时也要修改一个自定义的属性，这样onpropertychange就会被触发两次，这个可能并不是我们所希望的。<br>&nbsp;&nbsp;&nbsp;&nbsp;猜想一下，既然提供了这么一个属性，那一定应该能获取到是哪个属性被改变了。试着获取参数个数及参数内容.
<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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="xxx"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="xx"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="this.myprop='xx'"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('xx').attachEvent('onpropertychange',</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(arguments.length);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">arguments.length;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(arguments[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;执行上面一段代码，会发现弹出了1和[object]，这说明该事件只给回调函数传入一个参数而且是object类型。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那我们就试试遍历一下这个object。<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">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="xxx"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="xx"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="this.myprop='xx'"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('xx').attachEvent('onpropertychange',</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(o){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;item&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">in</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;o){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(item</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">:</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">o[item]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp; 执行一下，发现有很多个属性，但仔细看我们可能会发现这么一个属性：propertyName，相信每个人都能猜到这个属性的意思了。对，这个就是用来获取哪个属性被修改的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="xxx"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="xx"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="this.myprop='xx'"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('xx').attachEvent('onpropertychange',</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(o){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(o.propertyName);<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span></div>
<br>&nbsp;&nbsp; 分别单击文本框和输入一个值，会发现分别弹出了myprop和value。<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; 再回到我们开始的问题，我们只需要判断是否是value被改变就ok了。<br>&nbsp;&nbsp; 直接看代码吧：<br>&nbsp;&nbsp;
<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">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="xxx"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="xx"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="this.myprop='xx'"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById('xx').attachEvent('onpropertychange',</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(o){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(o.propertyName</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">!=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">'value')</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">return</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">不是value改变不执行下面的操作</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><img src="http://www.cnitblog.com/Images/dot.gif"><img src="http://www.cnitblog.com/Images/dot.gif">.函数处理</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/45941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-06-23 13:42 <a href="http://www.cnitblog.com/yemoo/archive/2008/06/23/45941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“【XPATH错误】方法未知：--&gt;contains(@&lt;-” 的解决办法</title><link>http://www.cnitblog.com/yemoo/archive/2008/06/23/45940.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 23 Jun 2008 05:40:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/06/23/45940.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/45940.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/06/23/45940.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/45940.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/45940.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>今天使用xpath做一个模糊查询，在使用了一句 result=this.xmlDocRoot.selectNodes(".//*[contains(@c,'"+value+"')]");的语句时，居然报&#8220;方法未知：--&gt;contains(@&lt;-&#8221;的js错，郁闷半天，不明白是怎么回事，以前一直都这样用的，语句没有问题。<br>&nbsp;&nbsp;&nbsp;&nbsp; 详细对比了下以前的脚本，发现了一句不同地方：即创建xmlDom后有这么一句&#8220;xmlDom.setProperty('SelectionLanguage','XPath');&#8221;，突然回忆起来，原来在xmldom中使用xpath语法需要做一个声明，加上这一句测试，问题果然解决！对这个问题印象更加深刻了。希望对同样有遇到此问题的朋友能有所帮助。 <p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/45940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-06-23 13:40 <a href="http://www.cnitblog.com/yemoo/archive/2008/06/23/45940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断html元素是否真正可见的巧妙方法</title><link>http://www.cnitblog.com/yemoo/archive/2008/06/23/45938.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 23 Jun 2008 05:37:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/06/23/45938.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/45938.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/06/23/45938.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/45938.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/45938.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>在Ext中，几乎所有的组件都有isVisible()方法和hidden属性，都是用来判断是否组件元素是否可见，这在ext内部管理来说没有问题，但有时我们把组件放在了自己的html结构内，如果我们把自己编写的html元素通过css定义为隐藏后，使用ext的isVisible方法和hidden属性就不能正确获取到组件是否可见了，因为ext也仅仅是根据判断元素的visibility和display属性来确定元素是否可见的。因此如果本身没有设定隐藏而外层设定了隐藏，则不能通过这两个css属性来判断元素是否可见了。<br><br>在实际的应用中，有时还必须需要知道元素的真实的可见性，但此时通过ext的内部方法就不管用了，思考测试许久突然想起了一个元素，当元素不可见时读取其实际高度或宽度则可能返回0，测试发现果然如此。<br>通过读取其offsetXXX或clientXXX来判断，或者使用Ext的getSize或getComputedWidth/Height方法获取，如果元素在页面不可见则会返回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: #0000ff">var</span><span style="COLOR: #000000">&nbsp;timer</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">setInterval(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(el.getComputedHeight()</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">el.getComputedWidth()</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">do&nbsp;something</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(timer);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>},</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span></div><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/45938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-06-23 13:37 <a href="http://www.cnitblog.com/yemoo/archive/2008/06/23/45938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>try finally 妙用,防止内存泄漏【转自51js】</title><link>http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 18 Jun 2008 06:58:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/45850.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/45850.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/45850.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><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: #000000">&lt;</span><span style="COLOR: #000000">div&nbsp;id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">div</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;createButton(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;obj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">button</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">点我!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onclick</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理click事件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseover</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理mouseover事件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;obj;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里由于需要返回创建的对象，所以不能把obj直接设为null.&nbsp;return&nbsp;后obj是局部变量，不能在外部断开其与HTMLElement的引用.ie中将出现问题泄漏问题</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;按钮&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.getElementsById(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).appendChild(&nbsp;createButton());<br>按钮.做某些事();<br>按钮.做某些事();<br><img src="http://www.cnitblog.com/Images/dot.gif"><img src="http://www.cnitblog.com/Images/dot.gif">..<br>某些东西.某些事(按钮);<br><img src="http://www.cnitblog.com/Images/dot.gif"><img src="http://www.cnitblog.com/Images/dot.gif"><br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br>这种写法在IE中100%内存泄漏<br><br>使用try finally很容易解决些问题<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">function</span><span style="COLOR: #000000">&nbsp;createButton(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;obj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">button</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">点我!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onclick</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理click事件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseover</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处理mouseover事件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;obj;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这句话在return&nbsp;之后才执行&nbsp;,&nbsp;的效的解决了需在return后将obj置null的问题</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br>一个函数或方法中，其实有很多地方都需要这种选返回值，最后执行某些事的<br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/45850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-06-18 14:58 <a href="http://www.cnitblog.com/yemoo/archive/2008/06/18/45850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS完美实现对象克隆</title><link>http://www.cnitblog.com/yemoo/archive/2008/06/18/45848.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 18 Jun 2008 06:53:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/06/18/45848.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/45848.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/06/18/45848.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/45848.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/45848.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>我们知道，在js中，当object作为参数传递到函数中进行处理后，实际上是修改了传入的对象本身（或者说是对象的引用），但很多时候我们并不希望函数去修改我们的这些对象参数，这就需要使用到对象的克隆，我们应该对该对象做一个克隆，然后操作这个克隆的对象，这样就不会影响我们的原对象了。<a name=entrymore></a><br>&nbsp;&nbsp;&nbsp;&nbsp;不过在js中并没有对象克隆功能，因此需要我们自己实现，实现方法也不复杂其实，基本上是做一些属性复制，我在网上找了一些，但有些实现并不好，如对于array对象克隆后就成json对象了，并没有保留原来的数组方式。不过最后还是找到了一个很好的克隆函数，完美实现了js对象的克隆功能，不论是Array对象或者是普通的Object，都可以很好的进行克隆，这个函数使用constructor(函数构造器)进行复制。<br><br><strong>具体代码如下： </strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">Object.prototype.Clone&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;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;objClone;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;Object){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.valueOf());&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;key&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key]&nbsp;){&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key])&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;'object'&nbsp;){&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key].Clone();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;objClone.toString&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.toString;<br>&nbsp;&nbsp;&nbsp;&nbsp;objClone.valueOf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.valueOf;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;objClone;&nbsp;<br>}&nbsp;</span></div><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><<img src ="http://www.cnitblog.com/yemoo/aggbug/45848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-06-18 14:53 <a href="http://www.cnitblog.com/yemoo/archive/2008/06/18/45848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现Ext Grid宽高自适应</title><link>http://www.cnitblog.com/yemoo/archive/2008/05/30/44593.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 30 May 2008 03:09:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/05/30/44593.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/44593.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/05/30/44593.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/44593.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/44593.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>不知是Ext的Bug还是其他原因，当初始化grid并将宽度设为100%时，其宽度会变成10000px宽，高度100%则grid高度根据grid内容自适应，而不是根据其所在容器自适应，一直没有很好的办法，只能使用绝对宽高，但有时这是很不方便的。<br>对此问题一直耿耿于怀，后来终于想出了一个办法，还真的可行，但就是感觉有点蹩脚。<br>一般我们都通过render到指定id的层上来展现grid，虽然不能让grid宽高自适应，但层还是可以的。<br>如我们这里要用到的层是&lt;div id="orgGrid"&gt;&lt;/div&gt;。我们可以在这个层上设置高宽。<br>如&lt;div id="orgGrid" style="width:100%;height:250px"&gt;&lt;/div&gt;。<br>则在初始化grid的时候让其宽高与orgGrid宽高相同即可，并在页面resize时重新计算器宽度即可（一般高度固定还是比较好）。<br><br><strong>js代码如下：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">..前面若干行代码省略，如ds/colmodel等</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;orgGrid</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Ext.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">orgGrid</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">展示grid的容器</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;grid&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Ext.grid.GridPanel({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:</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;ds:&nbsp;ds,&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">数据源</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cm:&nbsp;colModel,&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">列模式</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sm:selMode,&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">选择模式</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:orgGrid.getComputedWidth(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:orgGrid.getComputedHeight(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoExpandColumn:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">memory</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">自动扩展宽度的列</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoScroll:</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loadMask:{msg:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">数据加载中，请稍等<img src="http://www.cnitblog.com/Images/dot.gif"></span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds.load();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid.render(orgGrid);&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把grid铺到id为grid的容器中</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>window.onresize</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid.setWidth(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid.setWidth(orgGrid.getComputedWidth());<br>};<br><br></span></div>
这样不论页面宽度怎么变化grid都会自适应页面容器了。<br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><<img src ="http://www.cnitblog.com/yemoo/aggbug/44593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-05-30 11:09 <a href="http://www.cnitblog.com/yemoo/archive/2008/05/30/44593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建立优美的面向对象JS编程风格</title><link>http://www.cnitblog.com/yemoo/archive/2008/05/29/44538.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Thu, 29 May 2008 06:01:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/05/29/44538.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/44538.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/05/29/44538.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/44538.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/44538.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>由于js语言自身语法的灵活性，使得在js程序中出现了各种各样的代码风格，但也正因为如此，导致了代码的可读性和可维护性大大降低，特别随着项目的不断更新，js代码的不断增多，到后期维护时甚至连自己写的代码都不知所以然了，因此确定一种好的代码风格是很有必要的。<br><br>近两年随着ajax的兴起，js变得越来越受&#8220;重用&#8221;，js开始在web开发中中充当着非常重要的角色，因此也开始遇到了各种各样的问题。于是很多牛人们就提出了js的面向对象编程方法。<a name=entrymore></a><br><br>使用面向对象的编程思想实现js代码其实也并不难，实现方法也又多种，比如prototype原型，new object()等方法。前面的每个方法都有其自己的优缺点，但都存在一个问题，那就是对于js变量作用域的控制。如果不能很好控制js变量作用域，就可能导致对象内部变量被外部肆意修改，从而导致程序被破坏，不便于程序的维护，对象的封装特性和程序健壮性都大打折扣。被由于js本身没有很好的对变量范围的定义（public/private等限定符），因此在js的面向对象编程中也就遇到了变量的控制问题，特别是对于对象内部的公有变量在prototype原型方法中都很难实现。<br><br><strong>如下面一段程序：</strong><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;testCls(a){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br>}<br>testCls.prototype.alertA</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.a);<br>}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;test</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;testCls(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br>test.alertA();&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">弹出5</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">alert(test.a);&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">同样弹出5</span></div>
<br>要在其方法alertA中显示对象的内部公用变量a的值就必须在构造函数中通过this赋值，然后在方法中通过this引用。这样本身是没有什么问题，但这样a变量其实就成了一个全局变量，任何testCls的对象都可以直接引用到a，如上例中通过test.a获取到a的值。但很多时候我们并不希望一些对象变量对外公开，即不允许外部程序访问。这应该如何实现呢？如何才能实现一种更好的面向对象编程方式呢？<br><br><br><strong>当然我们可能都会想到这种方式：</strong><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;testCls</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(arg1){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arg1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;alertB</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(b);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">5</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">.setA</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(v){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.alertA</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(a);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.alertB</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alertB();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;test</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;testCls(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br>test.setA(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>test.alertA();<br>test.alertB();<br></span></div>
这样其实也很好解决了上面提到的问题，但是总又点不雅观，所有变量和方式都混杂在一起看起来很难区分哪些是可以公开访问哪些是不允许公开访问的，哪些是对象的私有变量和公开变量。这样在可读性上就有点差强人意了，我们可以去寻找一种更为雅观的实现方式。<br><br>其实只要利用js的闭包特性这个问题就很好搞定了，这也是俺从ext的源码中学习到的。<br><strong><br>示例代码如下：</strong><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;testCls</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(arg1){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">对象内部公有变量，不允许外部访问</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arg1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;alertB</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(b);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">外部可访问区域</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c:</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setA:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(v){<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;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alertA:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<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;alert(a);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alertB:</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<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;alertB();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;test</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;testCls(</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);<br>test.setA(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br>test.alertA();<br>test.alertB();<br><br></span></div>
<br>同样的实现上面的功能，而且将对象私有变量和公有变量完全分开区域，一目了然，很容易区分出哪些是私有变量哪些是公有变量，这样程序的可读性就得到了大大的提高，而且对对象变量也得到了很好的控制。<br><br>如此优美的实现方法，真的让我们不得不叹服js的伟大，当然也要赞一下Extjs的开发者们。<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/44538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-05-29 14:01 <a href="http://www.cnitblog.com/yemoo/archive/2008/05/29/44538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使Ext的Template可以解析二层的json数据</title><link>http://www.cnitblog.com/yemoo/archive/2008/04/30/43104.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 29 Apr 2008 16:16:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/04/30/43104.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/43104.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/04/30/43104.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/43104.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/43104.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><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">{id:&nbsp;'myid',&nbsp;cls:{o:'myclass'},&nbsp;name:&nbsp;'foo',&nbsp;value:&nbsp;'bar'}</span></div>
Ext的Template支持通过传入json数据的方式进行模板替换。<br><strong>API中有这样一段示例： </strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><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;Ext.Template(<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">div&nbsp;name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{id}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">span&nbsp;class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{cls}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">{name:trim}&nbsp;{value:ellipsis(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">)}</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">span</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">div</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">'<br>);<br>t.append('some</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">element',&nbsp;{id:&nbsp;'myid',&nbsp;cls:&nbsp;'myclass',&nbsp;name:&nbsp;'foo',&nbsp;value:&nbsp;'bar'});</span></div>
<br><br><strong>稍作修改做个测试：</strong><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">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;Ext.Template(<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">div&nbsp;name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{id}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">span&nbsp;class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{cls}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">{name}&nbsp;{value}</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">span</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">div</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">'<br>);<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;dt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t.apply({id:&nbsp;'myid',&nbsp;cls:&nbsp;'myclass',&nbsp;name:&nbsp;'foo',&nbsp;value:&nbsp;'bar'});<br>alert(dt);<br></span></div>
<br>运行上面的代码会弹出&lt;div name="myid"&gt;&lt;span class="myclass"&gt;foo bar&lt;/span&gt;&lt;/div&gt;说明替换成功。<br><br>但如果又这样一个模板数据：<br><br><br>我们想在替换时将模板中原cls部分替换为cls.o的值，也就是myclass，该怎么做呢？是不是想直接用{cls.o}，你可以试下，绝对无效，没有替换。因为template匹配替换是直接对{}中冒号前的字符串与JSON变量进行匹配的。当然找不到cls.o这个串所以也就不能匹配。<br>好在Template支持对数据的解析处理。<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">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;Ext.Template(<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">div&nbsp;name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{id}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">span&nbsp;class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{cls:this.parseJSON}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">{name}&nbsp;{value}</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">span</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">',<br>&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">div</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">'<br>);<br>t.parseJSON</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(data){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;data.o};<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;dt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t.apply({id:&nbsp;'myid',&nbsp;cls:&nbsp;{o:'myclass'},&nbsp;name:&nbsp;'foo',&nbsp;value:&nbsp;'bar'});<br>alert(dt)</span></div>
<br>我们定义了一个叫parseJSON的解析方法，在模板中访问顶层的cls然后对cls(是一个object)的值进行处理（直接访问它的o属性）即可。<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><br><img src ="http://www.cnitblog.com/yemoo/aggbug/43104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-04-30 00:16 <a href="http://www.cnitblog.com/yemoo/archive/2008/04/30/43104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>undefined==null！</title><link>http://www.cnitblog.com/yemoo/archive/2008/03/31/41723.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 31 Mar 2008 03:54:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/03/31/41723.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/41723.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/03/31/41723.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/41723.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/41723.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>貌似以前也看过null==undefined，null!==undefined，但也一直没有在意。<br><br>近日看过去别人的一程序源码，到处都有一些如if(x!=undefined&amp;&amp;x!=null&amp;&amp;x!="")之类的判断，突然觉得写的很啰嗦，俺一般都直接if(x){}因为不论null、undefined、""在条件判断中其实都是false，何需如此啰嗦？（不过要注意如果你的x==0也是合法值的话就不能使用if(x){}来做条件判断了）<br><br>为了证明这种多余，俺也特意做了以下测试：<br>var x;<br>alert(x)<br>if(x==null){<br>&nbsp;&nbsp;&nbsp;&nbsp;alert('failed')<br>}<br><br>其中x为一个未初始化的变量，即undefined。<br>运行以上代码：先后弹出undefined和failed，说明x==null是符合条件的。<br><br>我们可以直接alert(null==undefined)其实也可以发现返回了true。<br><br>这都说明进行x==null||x==undefined或x!=null&amp;&amp;x!=undefined之类的写法纯属多余！<br><br>一般只需判断null或undefined一个即可。<br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script>&lt; 
 <img src ="http://www.cnitblog.com/yemoo/aggbug/41723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-03-31 11:54 <a href="http://www.cnitblog.com/yemoo/archive/2008/03/31/41723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS文件传参及处理技巧</title><link>http://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 11 Mar 2008 11:18:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/40799.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/40799.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/40799.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>其实为js文件传参是很久就接触过的一个问题，只是一直没有放在心上，今天在无忧看到又有人问这个问题，今日总结一下。<br><br><strong>解决思路：</strong><br><br>1、首先获取到当前JS文件的SRC属性，这里有一个小技巧：我们只需要获取当前页面最后一个script标记内容即可。<br>为什么？？<span style="COLOR: #ff0000">因为JS是顺序解析的，当前JS脚本解析时后面的js都还没有解析到，当然就认为自己就是最后一个script了。</span>此外，这样获取还有一个好处：<span style="COLOR: #ff0000">我们可以多次引用同一个文件且传入不同的参数，这样可以在js文件中根据参数不同做不同处理，很巧妙把！简直就是动态语言了。</span><br><strong>代码如下：<br><br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;scripts</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.getElementsByTagName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;curJS</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">scripts[scripts.length</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">curJS就是我们当前的js文件</span></div>
<br><br>得到这个就好办了，通过curJS.src即可获取到完整的路径内容（包括参数）。<br><br>2、下面的就是解析参数内容了，解析的过程相当简单，相信很多人都容易完成这一步。<br>但我们要对一个特殊情况进行处理：<span style="COLOR: #ff0000">如果一个参数被传入了多次，则要将该参数值转换为数组存储每一个传入的值。</span><br><br><strong>演示地址：</strong><a href="http://www.ajaxbbs.net/test/getArgs/" target=_blank><u><font color=#0000ff>http://www.ajaxbbs.net/test/getArgs/</font></u></a><br><br><strong>完整测试脚本如下：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;getArgs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;sc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.getElementsByTagName('script');<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;paramsArr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sc[sc.length</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].src.split('</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">')[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].split('</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">');<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;args</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{},argsStr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">[],param,t,name,value;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">paramsArr.length;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;param</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">paramsArr[i].split('</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">param[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">param[</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">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;args[name]</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: #008000">//</span><span style="COLOR: #008000">参数尚不存在</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args[name]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;args[name]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">){&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">参数已经存在则保存为数组</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args[name]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">[args[name]]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args[name].push(value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">{&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">已经是数组的</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args[name].push(value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">在实际应用中下面的showArg和args.toString可以删掉，这里只是为了测试函数getArgs返回的内容</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;showArg</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(x){&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">转换不同数据的显示方式</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">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(x)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;&amp;!/</span><span style="COLOR: #000000">\d</span><span style="COLOR: #000000">+/</span><span style="COLOR: #000000">.test(x))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">字符串</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">(x&nbsp;</span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000">&nbsp;Array)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">数组</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">数字</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">组装成json格式</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;args.toString</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;args)&nbsp;argsStr.push(i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">':'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">showArg(args[i]));<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">argsStr.join(',')</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">function</span><span style="COLOR: #000000">(){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;args;}&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以json格式返回获取的所有参数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">})();<br><br>alert(getArgs());<br>alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">getArgs()[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]);</span></div>
<br><br><strong>测试示例的HTML源码：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&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">&nbsp;new&nbsp;document&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generator"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">="editplus"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="author"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="keywords"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="description"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #ff0000">&nbsp;src</span><span style="COLOR: #0000ff">="test.js?id=4&amp;username=yemoo&amp;id=1&amp;uid=110"</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><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #ff0000">&nbsp;src</span><span style="COLOR: #0000ff">="test.js?id=5&amp;username=ajaxbbs&amp;id=7&amp;uid=253"</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><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #ff0000">&nbsp;src</span><span style="COLOR: #0000ff">="test.js?id=6&amp;username=jack&amp;id=8&amp;uid=258"</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><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><strong><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align=top></strong></span></div>
<br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/40799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2008-03-11 19:18 <a href="http://www.cnitblog.com/yemoo/archive/2008/03/11/40799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三种For循环写法的性能比较</title><link>http://www.cnitblog.com/yemoo/archive/2007/12/18/37851.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 18 Dec 2007 15:47:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/12/18/37851.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37851.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/12/18/37851.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37851.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37851.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>循环作为程序语言的三大逻辑控制结构之一，在实际开发是经常会遇到的。<br>在JavaScript程序的循环结构使用上，我们经常会遇到这种应用。<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">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a.length;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a[i]<br>}</span></div>
<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">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,iLen</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.length;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iLen;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a[i]<br>}</span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,item;item</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">item;<br>}<br>或<br></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,item;(item</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i])</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">undefined;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">item;<br>}</span></div>
<br><br>对于三种写法其性能到底有多大差异呢？到底哪个的效率更高呢？<br><br>我在自己的机器上对其做了测试：<br>发现在10000条数据以下时三者执行速度差别不大，差别大概在0.01m左右，而且测试结果不稳定。<br>然后将数据变为50w条进行测试：<br>三种方法测试结果分别为：<br>1182<br>981<br>1673（而且出现&#8220;程序执行缓慢，是否取消该脚本&#8221;的提示）<br><br>1572<br>1462<br>12067（同样出现了脚本加载缓慢的提示）<br><br>尽管数据并不是非常稳定，但还是能从中发现点什么的。<br><br><span style="COLOR: #008000">速度最快的是第二种写法：即保存对象长度，避免每次都计算</span>。<br><span style="COLOR: #ff0000">速度最慢的是第三种写法：即不关系对象的长度，而根据当前项是否存在来循环。</span><br><br>之前我一直以为是第三种写法速度应该是最快的（因为不用计算长度），今日一测才发现第三种的执行效率如此低下，看来还是避免使用。当然，很多时候我们可能还是不得不使用这第三种写法。<br><br><strong>测试程序如下：（建议分开对三个程序进行测试，特别是在FF下）</strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">[];<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">500000</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;a.push(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;timer1</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a.length;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a[i];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;alert(sum</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ntime:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">timer1));<br><br>&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;timer2</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,iLen</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.length;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iLen;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a[i];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;alert(sum</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ntime:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">timer2));<br><br>&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;timer3</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,item;item</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">item;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;alert(sum</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ntime:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">timer3));<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-12-18 23:47 <a href="http://www.cnitblog.com/yemoo/archive/2007/12/18/37851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE及FF下关于setTimeout传参的研究总结</title><link>http://www.cnitblog.com/yemoo/archive/2007/12/18/37845.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 18 Dec 2007 14:34:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/12/18/37845.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37845.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/12/18/37845.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37845.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37845.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp;&nbsp;&nbsp;&nbsp;昨晚看《JavaScript核心技术》的BOM一章，上面写到setTimeout除了我们知道的两个参数（执行的函数，延迟时间）外后面还可以传一些参数，这些参数就是传递给&#8220;执行函数&#8221;的参数。<br><br>如 setTimeout(function add1(x,y){alert(x+y)},2000,3,5)会在2秒后弹出8，也许现在都明白这些参数的含义了。<br><br>近日突然想起于是测了一下，却失望的发现在IE下会弹出NaN，然后在add1里弹出arguments.length返回0，可见并没有将后面的两个参数传入add1中，不过在FF下确实是可以传入到add1中，看来又是一个IE/FF不兼容的特性，如此的一个特性其实挺好的，不晓得IE为何就不支持呢？每次都要在外面套一层Function真是麻烦。<br><br>接着在FF下测试setTimeout(function add1(){alert(arugments.length)},2000);执行后居然返回1，明明没有传参的，接着执行setTimeout(function add1(){alert(arugments.length)},2000,3);返回2，这不是多出了一个参数吗？<br><br>然后alert了最后的参数，发现延迟不同每次返回结果也都不同，而且都是数字。难道是setTimeout函数本身的执行时间？恩，应该是这样的，setTimeout本身执行也会有时间开销的。<br><br><strong>作如下测试： <br><br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;add(){<br>&nbsp;&nbsp;&nbsp;&nbsp;alert((</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">arguments[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>}<br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>setTimeout(add,</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);</span></div>
<br><span style="COLOR: #008000">对延迟进行修改测试出了以下数据：</span><br>延迟时间&nbsp;&nbsp;&nbsp;&nbsp;弹出内容<br>1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1009,8<br>2000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1998 -2<br>3000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3006 6<br><br>发现一个小规律：<span style="COLOR: #ff0000">执行时间差-那个奇怪的参数约等于延迟时间。</span><br>那个参数有点像setTimeout的执行的时间，但怎么会有负值呢？<span style="COLOR: #ff0000">它的意义大概就是实际延迟时间与设定延迟时间的差值吧。</span><br><br>这个问题就到这里吧。<br><br><strong>还有一个问题，能否在IE下实现如FF下setTimeout的功能呢？</strong><br>网上查了一下，已经有人去实现了这个，偶对其做简单改造，发布出来，其中对于计算差值的一行在实际中可以去掉，这里只是为了模拟和FF下完全一样的接口效果。<br><br>实现方法也并不复杂，主要利用了JS的call和apply，对call和apply不熟悉的可以先查看一下他们的用法。<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&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;st&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.setTimeout;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.setTimeout&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(fn,&nbsp;mDelay)&nbsp;{<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;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;fn&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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;args&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Array.prototype.slice.call(arguments,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;f&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args.push(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">mDelay);&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">该行用于实现对实际延迟和设定延迟的差值，同FF的最后一个参数，无实际意义</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn.apply(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,&nbsp;args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;st(f,&nbsp;mDelay);<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">return</span><span style="COLOR: #000000">&nbsp;st(fn,mDelay);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;})();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;test(x,y,z){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">z);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(test,</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">,'arg1','arg2');<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-12-18 22:34 <a href="http://www.cnitblog.com/yemoo/archive/2007/12/18/37845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用js实现模板替换机制</title><link>http://www.cnitblog.com/yemoo/archive/2007/12/05/37365.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 05 Dec 2007 09:44:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/12/05/37365.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37365.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/12/05/37365.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37365.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37365.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>Ext中为String扩展了一个静态方法format用于实现对字符串类模板机制的格式化。<br><br>如String.format("{0},{1},{2}","a","b","c");返回a,b,c。<br><br>看了一下其实现方式觉得比较优雅，而且该函数在实际当中也很有实用价值，于是自己就将其略加改造，实现对字符串的模板替换。<br><br><strong>代码如下：</strong><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">String.prototype.template</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;args</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arguments;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.replace(</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\{(\d</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">)\}</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">g,&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(m,&nbsp;i){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;args[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;});<br>}<br><br></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arg1:{0},arg2:{1},arg3:{2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>alert(a.template(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">arg1:a,arg2:b,arg3:c</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">alert(a.template(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">arg1:1,arg2:2,arg3:3</span></div>
<br>主要用replace+巧妙的正则实现。<br><br>调用方式很简单，首先建立一个模板字符串。如a="{0},{1}"，每个模板字符用{数字}表示。<br>然后直接调用a.template("arg1","arg2","arg3");<br>传入的参数与模板中定义的模板字符会对应着被替换。<br><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-12-05 17:44 <a href="http://www.cnitblog.com/yemoo/archive/2007/12/05/37365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用eval动态创建变量的一个小提示</title><link>http://www.cnitblog.com/yemoo/archive/2007/12/05/37363.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 05 Dec 2007 09:41:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/12/05/37363.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37363.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/12/05/37363.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37363.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37363.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>eval虽然是一个很消耗资源的操作，但很多时候我们还非要靠它不可。<br><br>比如使用eval动态创建变量，如var a="str"，我们可能希望将a的值str创建成为一个变量并赋值为test，这时大概只能靠eval了。<br><br>第一次偶遇到这个问题，想都没想直接来了下面一句代码：eval(a)="test"，结果一执行就给出了一个错误<span style="COLOR: #ff0000">：&#8220;不能给函数返回值赋值&#8221;，</span>顿时恍然大悟，eval怎么说也是个函数啊，我们大概都没有写过如myfunc(a)=""的语句。因为函数本身返回的也是一个值，将一个值赋给一个值当然不会正确了。<br><br>因为eval的强大和其特殊差点使我忘记了它还是个函数。<br><br><span style="COLOR: #0000ff">正确的写法应该这样：eval(a+"='test'"); </span><br>即将整个语句eval即可，一点小提示，以后不能再犯这种低级错误了！<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-12-05 17:41 <a href="http://www.cnitblog.com/yemoo/archive/2007/12/05/37363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript创建命名空间(namespace)的最简实现</title><link>http://www.cnitblog.com/yemoo/archive/2007/12/05/37362.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 05 Dec 2007 09:39:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/12/05/37362.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37362.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/12/05/37362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37362.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37362.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>最近看Ext源代码，看到了其实现命名空间函数的实现方法：<br><br>Ext NameSpace实现代码：
<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;namespace&nbsp;:&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;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arguments,&nbsp;o</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,&nbsp;i,&nbsp;j,&nbsp;d,&nbsp;rt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a.length;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i].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;&nbsp;&nbsp;&nbsp;&nbsp;rt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;d[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval('</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">&nbsp;'&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;rt&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;'&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</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">+</span><span style="COLOR: #000000">&nbsp;rt&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;'&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{};}&nbsp;o&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;'&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;rt&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;';');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">d.length;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o[d[j]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">o[d[j]]&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;{};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">o[d[j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>鄙人喜好最简编程（这很多时候并不是一个好习惯，写的越简单程序一般越难理解），于是就想用更短的方式解决这个问题。<br>尝试了将近半个小时写下了下面的实现，基本该考虑的情况都考虑，至少不会覆盖页面已经存在的函数。<br><br><strong>实现代码如下：</strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;namespace(ns){<br>&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">(ns)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;ns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns.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;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;o,ni;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns.length;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len,ni</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns[i];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{o</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(o</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">(o[ni]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">o[ni]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">{}):(eval(ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">||{}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)))}</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(e){o</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">eval(ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">={}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<br><br>你可以保存以下代码进行测试：<br><br><strong>测试代码： </strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;namespace(ns){<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">(ns)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns.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;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;o,ni;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns.length;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len,ni</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns[i];i</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">try</span><span style="COLOR: #000000">{o</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(o</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">(o[ni]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">o[ni]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">{}):(eval(ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">||{}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)))}</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(e){o</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">eval(ni</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">={}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;a(){</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">}<br>&nbsp;&nbsp;&nbsp;&nbsp;namespace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a.b</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(a);<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(a.b)<br>&nbsp;&nbsp;&nbsp;&nbsp;namespace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test.test.abc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;test.test.abc.func1</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('func1&nbsp;run')<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(test.test)<br>&nbsp;&nbsp;&nbsp;&nbsp;test.test.abc.func1();<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-12-05 17:39 <a href="http://www.cnitblog.com/yemoo/archive/2007/12/05/37362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JavaScript中apply与call的用法意义及区别</title><link>http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 30 Nov 2007 02:37:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/37070.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/37070.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/37070.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script>
<p>JavaScript中有一个call和apply方法，其作用基本相同，但也有略微的区别。<br><br>先来看看JS手册中对call的解释：<br></p>
<div style="BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px solid; BACKGROUND-COLOR: #fafafa">call 方法<br>调用一个对象的一个方法，以另一个对象替换当前对象。<br><br>call([thisObj[,arg1[, arg2[,&nbsp;&nbsp; [,.argN]]]]])<br><br><strong>参数</strong><br>thisObj<br>可选项。将被用作当前对象的对象。<br><br>arg1, arg2,&nbsp;&nbsp;, argN<br>可选项。将被传递方法参数序列。<br><br><strong>说明</strong><br>call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。<br><br>如果没有提供 thisObj 参数，那么 Global 对象被用作 thisObj。<br><br></div>
<p>说明白一点其实就是更改对象的内部指针，即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。<br><br>引用网上一个代码段，运行后自然就明白其道理。<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"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="myText"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #0000ff">="input&nbsp;text"</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Obj(){</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.value</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">对象！</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</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">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">global&nbsp;变量</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Fun1(){alert(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">this</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">.value);}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;window.Fun1();&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">global&nbsp;变量</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;Fun1.call(window);&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">global&nbsp;变量</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;Fun1.call(document.getElementById('myText'));&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">input&nbsp;text</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;Fun1.call(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Obj());&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">对象！</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>call函数和apply方法的第一个参数都是要传入给当前对象的对象，及函数内部的this。后面的参数都是传递给当前对象的参数。<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>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;func</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">func</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;myfunc</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(x){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myfunc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.a);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;myfunc.call(func,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">var</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br>可见分别弹出了func和var。到这里就对call的每个参数的意义有所了解了。<br><br>对于apply和call两者在作用上是相同的，但两者在参数上有区别的。<br><span style="COLOR: #ff0000">对于第一个参数意义都一样，但对第二个参数：<br>apply传入的是一个参数数组，也就是将多个参数组合成为一个数组传入，而call则作为call的参数传入（从第二个参数开始）。</span><br>如 func.call(func1,var1,var2,var3)对应的apply写法为：func.apply(func1,[var1,var2,var3])<br><br>同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/37070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-11-30 10:37 <a href="http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>收藏一篇关于JavaScript继承的E文</title><link>http://www.cnitblog.com/yemoo/archive/2007/11/19/36489.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 19 Nov 2007 01:47:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/11/19/36489.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/36489.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/11/19/36489.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/36489.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/36489.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>读了两遍，有所领悟，收藏以便今后温习。<br>翻译水平不行，就直接贴地址了。<br><strong>网址：</strong><a href="http://kevlindev.com/tutorials/javascript/inheritance/index.htm" target=_blank><u><font color=#800080>http://kevlindev.com/tutorials/javascript/inheritance/index.htm</font></u></a><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/36489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-11-19 09:47 <a href="http://www.cnitblog.com/yemoo/archive/2007/11/19/36489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关appendChild和innerHTML </title><link>http://www.cnitblog.com/yemoo/archive/2007/10/30/35581.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 30 Oct 2007 04:18:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/30/35581.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/35581.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/30/35581.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/35581.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/35581.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在我们向dom页面写入一些内容时，一般我们都是既使用innerHTML也可以使用appendChild，两者功能似乎没有多大差别。很多朋友一定也对这两个东西感到困惑，今天写代码时我就想到了这个问题，两者真的没有差别吗？<br><br>在网上查看了一些文章，然后再通过自己一些测试，得到了如下一些结论。<br><br>1、在执行速度的比较上，使用appendChild比innerHTML要快，特别是内容包括html标记时，appendChild明显要快于innerHTML，这可能是因为innerHTML在铺到页面之前还要对内容进行解析才能铺到页面上，当包含html标记过多时，innerHTML速度会明显变慢。<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: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/1999/xhtml"</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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;new&nbsp;document&nbsp;</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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generator"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">="editplus"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="author"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="keywords"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="description"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</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">div&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="test1"</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">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="innerTest()"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="testInnerHTML"</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">id</span><span style="COLOR: #0000ff">="test2"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<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"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="appendTest()"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="testAppendChild"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;innerTest(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;t1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Date()).getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;a</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;b&gt;xxxxxxxx&lt;/b&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">test1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">500</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.innerHTML</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;alert((</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Date()).getTime()</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">t1);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;appendTest(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;t1</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Date()).getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">document.getElementById(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">test2</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">500</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;i</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;a</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.appendChild(document.createTextNode(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">xxxxxxxx</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.appendChild(a);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;alert((</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;Date()).getTime()</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">t1);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&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">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><br>2、如果appendChild的参数是页面存在的一个元素，则执行后原来的元素会被移除，如document.getElement("a").appendChild(document.getElementById("b"))，执行后，b元素会先被移除，然后再添加到a中。<br>3、通过appendChild添加到的是dom对象，返回的也是dom对象，可以通过dom对象访问获取元素的各种属性，而innerHTML则是纯字符串，不能获取内部元素的属性。<br>4、在使用上innerHTML比appendChild要方便，特别是创建的节点属性多，同时还包含文本的时候。<br><br>因此在使用时如果数据量较大且对性能有所要求时，还是应该使用appendChild。
<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script></p><img src ="http://www.cnitblog.com/yemoo/aggbug/35581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-30 12:18 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/30/35581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增强程序的灵活性--使用JSON作为函数的参数</title><link>http://www.cnitblog.com/yemoo/archive/2007/10/26/35373.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 26 Oct 2007 04:24:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/26/35373.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/35373.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/26/35373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/35373.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/35373.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;rootMenu</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Ext.tree.TreeNode({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text:</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;expanded:</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;});<br><br>Ext.MessageBox.show({<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:</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;msg:hArea.dom.innerHTML,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buttons:Ext.MessageBox.OK,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;animEl:hArea<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></div>
<br>使用过Ext的朋友可能会发现，在其所有的API中大量用到了JSON对象，Ext使用类如配置的方式来生成各个页面对象等，其特点就是函数的参数大都是json对象，其主要特点就是函数的参数大都是json对象。<br>如<br><br>等等此类的用法在Ext中到处可见，那么那样写有什么优点呢？为什么不直接写函数参数而要通过JSON对象作为参数传入？<br><br>今日查看了Ext的帮助说明才真正认识到使用json对象作为函数参数的优点。<br><strong>总结两点：</strong><br><br><strong>1、程序灵活性高，容易扩展和使用。</strong><br>我们可以随时为一个函数添加/删除参数或在任意参数位置添加新参数，而不会像传统参数一样必须按照规定的顺序书写，而且每次添加或删除函数某个参数都要函数内容进行修改。而使用JSON作为参数可以不用考虑参数顺序。<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&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">普通方法</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;commonArg(name,age,desc){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;userinfo</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">age:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">age</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ndescription:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">desc;<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(userinfo);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;commonArg(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">yemoo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">22</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;boy!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">每次调用都必须按照规定的参数顺序书写，如果写成commonArg(22,"yemoo","desc")则返回信息就不对，每次都必须记忆每个参数意义及顺序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">JSON参数法</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;jsonArg(info){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;userinfo</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">info.name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\tage:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">info.age</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ndescription:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">info.desc;<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(userinfo);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;jsonArg({name:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">blue</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,age:</span><span style="COLOR: #000000">22</span><span style="COLOR: #000000">,desc:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;gril?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">});<br>&nbsp;&nbsp;jsonArg({desc:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not&nbsp;a&nbsp;people!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,name:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sss</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,age:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">参数位置可以随意写</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br><span style="COLOR: red">普通函数缺点很明显：必须记忆参数意义和顺序。而使用JSON的方法则不需要。</span><br><br><strong>2、使用者对函数的调用非常方便，特别是在只需要传入其中几个或一个参数时。</strong><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&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">普通方法</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;commonArg(name,age,desc){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;userinfo</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(name</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">empty</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\tage:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(age</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ndescription:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">desc</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">empty</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(userinfo);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当只需要设定后面的参数时前面每个参数都需要设置为null</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;commonArg(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tempUser</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;commonArg(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;boy!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;commonArg(</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">JSON参数法</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;jsonArg(info){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;userinfo</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(info.name</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">empty</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\tage:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(info.age</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\ndescription:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(info.desc</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">empty</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(userinfo);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">每次只需要设置需要设定参数项</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;jsonArg({name:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tempUser</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">});<br>&nbsp;&nbsp;jsonArg({desc:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a&nbsp;boy!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">});<br>&nbsp;&nbsp;jsonArg({age:</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">});<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br><span style="COLOR: #ff0000">JSON方法优点很明显：每次只需传入需要的参数即可，而不用考虑其他参数。</span><br><br>JSON真是一个好用的东西，不用在ajax方面还是在js的其他方面都体现了其方便灵活的特性，的确应该好好去挖掘和学习json。<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/35373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-26 12:24 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/26/35373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JS+Ajax记录用户鼠标移动过程【译-附原文】</title><link>http://www.cnitblog.com/yemoo/archive/2007/10/22/35191.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 22 Oct 2007 09:19:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/22/35191.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/35191.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/22/35191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/35191.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/35191.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><div class=textbox-content id=zoomtext>
<div style="FLOAT: right; MARGIN: 0px 0px 5px 5px" align=left><iframe name=google_ads_frame marginWidth=0 marginHeight=0 src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6054586558396945&amp;dt=1193044526748&amp;lmt=1193044661&amp;prev_fmts=468x15_0ads_al_s&amp;format=200x200_as&amp;output=html&amp;correlator=1193044526738&amp;url=http%3A%2F%2Fwww.ajaxbbs.net%2Fblog%2Fpost%2F187%2F&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fwww.ajaxbbs.net%2Fblog%2Fpost%2F186%2F&amp;cc=100&amp;ga_vid=1736774895.1193044526&amp;ga_sid=1193044526&amp;ga_hid=738724627&amp;flash=9&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=15&amp;u_java=true" frameBorder=0 width=200 scrolling=no height=200 allowTransparency></iframe></div>
I just found some piece of code i created one or two years ago. The &#8220;movelogger&#8221; records the mouse movement a users does on a web site. Just before the user leaves the current page, the recorded data get posted back to the server using AJAX.<br><span style="COLOR: #00008b">我发现了一两年前写的一些代码。其中一个"movelogger"的程序用于记录一个用户在网站浏览过程中的鼠标移动过程。当用户离开当前页面之前，我们可以通过ajax将这些记录的数据发送到服务端。</span><a name=entrymore></a><br><br>The cool thing is that you can &#8220;replay&#8221; these movements afterwards. The movelogger records clicks on links and other elements. In replay mode this events are fired in the exact same order as they have been recorded.<br>That way it would be possible to record a websesion (the click-flow) in a heavy AJAX based application. It would even be possible to record keyboard strokes and other type of events.<br><span style="COLOR: #00008b">一个很酷的事就是我们可以之后重新&#8220;回放&#8221;这些移动行为（过程），movelogger还可以记录链接及其他一些元素的点击行为。在回放模式这些事件操作会像用户原来的操作过程和方式一样重新被触发。通过这种方法我们可以在一些基于ajax的程序中记录websesion（点击流），或者可以记录一些键盘的敲击或其它的一些事件等。</span><br><br><a href="http://pure.rednoize.com/movelogger/" target=_blank><font color=#0000ff><u>Check out the little demo of the movelogger here.</u></font></a><br><a href="http://pure.rednoize.com/movelogger/" target=_blank><u><font color=#0000ff>点击此处可查看一个movelogger的demo示例。</font></u></a><br><br>This technique may be usefull or not. But some use cases could be:<br>Instead of eye tracking, use mouse tracking. <br>Analyze the usage of ajax enabled websites. <br>Spionage and other Bad Things&#8482; (not recommended). <br><span style="COLOR: #00008b">这种技术可能会有用或者是没用的。但可能会有下面的一些使用场景：<br>使用鼠标跟踪代替眼睛跟踪。<br>分析一些ajax的站点的使用方式。<br>spionage或其它的一些坏事（不建议使用）</span><br><br>The whole thing is coded in javascript using Prototype and script.aculo.us with some php code on the server side.<br><span style="COLOR: #00008b">这个程序的完整代码包括基于prototype和script.aculo.us的客户端javascript代码和用于服务端的php代码。</span><br><br>The data recorded on the demo website is stored only in the php session on the server and gets deleted automatically, soon after you close your browser. But theoreticaly it would be possible to store that data in some kind of database for further analysis.<br><span style="COLOR: #00008b">在demo示例中记录数据保存在了php服务端的session中，当您关闭浏览器后它会自动删除。但在理论上它可以存储在各种数据库中<br>以便于以后分析或做其它应用。</span> </div><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/35191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-22 17:19 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/22/35191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用正则批量替换单元格空白 </title><link>http://www.cnitblog.com/yemoo/archive/2007/10/17/34987.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 17 Oct 2007 04:33:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/17/34987.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34987.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/17/34987.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34987.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34987.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp; 在我们做table页面时可能都遇到过如果为table设定了大于0的边框border，当某个单元格中的内容未填充时在IE下浏览就会出现该单元格边框不显示的现象，这严重印象了表格界面的美观。我们一般使用填充&amp;nbsp;的方法来解决这个问题，但是如果我们一个个的手工填充似乎就显得有些麻烦了，当表格内容复杂时这种修改可能会是一个极大的工程。<br>&nbsp; 今天偶就想用js对这些替换进行批量的解决，首先想的的遍历单元格进行替换：<br><br><strong>代码如下：</strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;tdSpace(id){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;doc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.getElementById(id).getElementsByTagName(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">td</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">doc.length;i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">/^</span><span style="COLOR: #000000">\s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">$</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">g.test(doc[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].innerHTML)){doc[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].innerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;window.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;t1</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;tdSpace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">耗时：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t1)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">毫秒</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br>&nbsp;发现在表格数据很多时速度有些慢，对1800行&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;xxxx&lt;/td&gt;&lt;/tr&gt;的行进行替换需要1.5秒之多，毕竟这里使用循环变量，效率低是很正常的，于是开始想直接对整个表格进行搜索替换而不用循环来解决，思虑几分钟之后写出了如下代码：
<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&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;tdSpace(id){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;doc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.getElementById(id);<br>&nbsp;&nbsp;&nbsp;&nbsp;doc.outerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">doc.outerHTML.replace(</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">td[</span><span style="COLOR: #000000">^&gt;</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">)\s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">td</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">ig,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$1&amp;nbsp;$2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;window.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;t1</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;tdSpace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">耗时：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t1)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">毫秒</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br>执行了一下，效率的确提高了很多，和上面同样多的数据基本只需要60-70毫秒左右，这基本可以满足要求了。<br><br>考虑到只需要对ie做如上处理且在FF下不支持outerHTML的写法，再加上一个简单的浏览器判断搞定。<br><br><strong>最终代码：</strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;[color</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">#FF0000]tdSpace[</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">color](id){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">document.all)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;doc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.getElementById(id);<br>&nbsp;&nbsp;&nbsp;&nbsp;doc.outerHTML</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">doc.outerHTML.replace(</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">td[</span><span style="COLOR: #000000">^&gt;</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">)\s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">td</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">ig,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$1&amp;nbsp;$2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;window.onload</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;t1</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime();<br>&nbsp;&nbsp;&nbsp;&nbsp;tdSpace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">耗时：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date().getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t1)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">毫秒</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<br><span style="COLOR: #0000ff">在需要对表格内的单元格做空白处理时只需调用tdSpace即可，参数为table的id。</span><br><br><strong>演示地址：</strong><a href="http://ajaxbbs.net/test/replaceTdSpace.html" target=_blank><u><font color=#0000ff>http://ajaxbbs.net/test/replaceTdSpace.html</font></u></a> <p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-17 12:33 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/17/34987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iframe src为图片时的高度自适应 </title><link>http://www.cnitblog.com/yemoo/archive/2007/10/12/34768.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 12 Oct 2007 08:21:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/12/34768.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34768.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/12/34768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34768.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34768.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp;&nbsp;&nbsp;&nbsp; 对于iframe高度自适应的问题，网上已经被讨论n次了，一般通过在iframe加载完毕时访问iframe内页body的offsetHeight和offsetWidth然后更新iframe的高宽来实现。<br>&nbsp;&nbsp;&nbsp;&nbsp;今日遇到的自适应问题与以往有一些不同，这次的src是一张图片，而且是一张大小不确定的图片（从数据库取出来的数据生成的），在此使用以往的方式似乎就没有那么灵验了。突然想到img标记的高宽是可以获取到的。于是突然有了思路。<br><br><strong>解决办法如下：</strong><br>先动态生成一个img元素，在iframe页面加载完成时(onload)将其src赋给img标记，然后获取该img的高宽，再动态修改iframe高宽即可，同时不要忘了设定iframe页面body的margin和padding为0，否则会由于padding和margin默认不为0的缘故导致出现滚动条。<br><br><strong>测试代码如下：</strong><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: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/1999/xhtml"</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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;new&nbsp;document&nbsp;</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;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="generator"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">="editplus"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="author"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="keywords"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="description"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!--</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;resize(obj){<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;ifrm</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">obj.contentWindow.document.body;<br>&nbsp;&nbsp;ifrm.style.cssText</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">margin:0px;padding:0px;overflow:hidden</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;div</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">document.createElement(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">img</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br>&nbsp;&nbsp;div.src</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">obj.src;<br>&nbsp;&nbsp;obj.height</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">div.height;<br>&nbsp;&nbsp;obj.width</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">div.width;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">--&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&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">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">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #ff0000">&nbsp;onclick</span><span style="COLOR: #0000ff">="document.getElementById('a').style.display=''"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">iframe&nbsp;</span><span style="COLOR: #ff0000">src</span><span style="COLOR: #0000ff">="1.jpg"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="a"</span><span style="COLOR: #ff0000">&nbsp;style</span><span style="COLOR: #0000ff">="display:none"</span><span style="COLOR: #ff0000">&nbsp;scrolling</span><span style="COLOR: #0000ff">="auto"</span><span style="COLOR: #ff0000">&nbsp;onload</span><span style="COLOR: #0000ff">="resize(this)"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">iframe</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><p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-12 16:21 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/12/34768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS中的instanceof和typeof </title><link>http://www.cnitblog.com/yemoo/archive/2007/10/10/34642.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Wed, 10 Oct 2007 07:15:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/10/34642.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34642.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/10/34642.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34642.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34642.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>&nbsp;&nbsp; 对于instanceof和typeof，以前偶尔的用到过，特别是typeof用到的相对更多一些，今日研究ext源码，很多地方都用到了instanceof，突然觉得他们两个有些相似但也应该有他们区别，网上看了一些文章，对它们之间的关系有了一定的了解。<br><br>instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量。<br>typeof用以获取一个变量的类型，typeof一般只能返回如下几个结果：<span style="COLOR: #0000ff"><a name=entrymore></a>number,boolean,string,function,object,undefined</span>。我们可以使用typeof来获取一个变量是否存在，如if(typeof a!="undefined"){}，而不要去使用if(a)因为如果a不存在（未声明）则会出错，对于Array,Null等特殊对象使用typeof一律返回object，这正是typeof的局限性。<br><br>如果我们希望获取一个对象是否是数组，或判断某个变量是否是某个对象的实例则要选择使用instanceof。instanceof用于判断一个变量是否某个对象的实例，如var a=new Array();alert(a instanceof Array);会返回true，同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。再如：function test(){};var a=new test();alert(a instanceof test)会返回true。<br><br>谈到instanceof我们要多插入一个问题，就是function的arguments，我们大家也许都认为arguments是一个Array，但如果使用instaceof去测试会发现arguments不是一个Array对象，尽管看起来很像。 <p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-10 15:15 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/10/34642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转换字符串为json对象的方法 </title><link>http://www.cnitblog.com/yemoo/archive/2007/10/08/34526.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Mon, 08 Oct 2007 06:17:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/10/08/34526.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34526.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/10/08/34526.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34526.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34526.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br><p>&nbsp;&nbsp;&nbsp; JSON是一种便于操作使用的轻量级数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。具体介绍请查看：<a href="http://www.json.org/">http://www.json.org</a>。</p>
<p>很多时候我们需要组装字符串为json对象，首先要组合字符串，然后转换为json对象，如下面的例子：</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">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">,b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xxx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{id:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,name:'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<p>组合成了字符串arr，下一步就是转换成对象了，很快我们会想到使用eval方法，但如果这样做转换会出现错误，今日偶就这样尝试了，那该如何转换成json对象呢？郁闷许久，之后在json官网提供的json.js文件中找到了解决办法，方法如下：<br>在字符串两端再加上括号然后eval就ok了。测试代码如下：</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">&lt;</span><span style="COLOR: #000000">script&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">50</span><span style="COLOR: #000000">,b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xxx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{id:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,name:'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;arr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">eval('('</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">arr</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">')')<br>&nbsp;&nbsp;alert(arr.name);<br>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<p><br>上面代码执行后会弹出&#8220;xxx&#8221;，说明已经成功转换为json对象了，一个似乎很简单的问题，不过还是郁闷了半天才解决掉，还是记到blog上以加深印象，也希望能帮助遇到此问题的朋友早日解除郁闷。 <br></p><br><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-10-08 14:17 <a href="http://www.cnitblog.com/yemoo/archive/2007/10/08/34526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断浏览器刷新与关闭的代码</title><link>http://www.cnitblog.com/yemoo/archive/2007/09/30/34258.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Sun, 30 Sep 2007 08:23:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/30/34258.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34258.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/30/34258.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34258.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34258.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>当浏览器退出时会触发onunload事件，因此我们可以使用onunload事件做一些在页面关闭时要执行的操作，如提示用户信息等。但或许在实际应用中我们都发现一个问题，刷新浏览器同样会触发onunload事件，也就是只要是离开该页面就会触发onunload事件，或许刷新时我们并不想执行onunload定义的操作，或者我们只想在刷新时执行某操作，这样我们就遇到了一些麻烦。<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: #0000ff">&lt;</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">TITLE</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">判断是刷新还是关闭－www.51windows.Net</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">TITLE</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta&nbsp;</span><span style="COLOR: #ff0000">http-equiv</span><span style="COLOR: #0000ff">="Content-Type"</span><span style="COLOR: #ff0000">&nbsp;content</span><span style="COLOR: #0000ff">="text/html;&nbsp;charset=gb2312"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">META&nbsp;</span><span style="COLOR: #ff0000">NAME</span><span style="COLOR: #0000ff">="Author"</span><span style="COLOR: #ff0000">&nbsp;CONTENT</span><span style="COLOR: #0000ff">="51windows,海娃,haiwa"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">META&nbsp;</span><span style="COLOR: #ff0000">NAME</span><span style="COLOR: #0000ff">="Description"</span><span style="COLOR: #ff0000">&nbsp;CONTENT</span><span style="COLOR: #0000ff">="Power&nbsp;by&nbsp;51windows.Net"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">HEAD</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br><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">&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;CloseOpen(event)&nbsp;{&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(event.clientX</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;&amp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;event.clientY</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)&nbsp;{&nbsp;<br>alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">关闭</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;<br>}&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;<br>{&nbsp;<br>alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">刷新或离开</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;<br>}&nbsp;<br>}&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body&nbsp;</span><span style="COLOR: #ff0000">onunload</span><span style="COLOR: #0000ff">="CloseOpen(event)"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">BODY</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">HTML</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div&nbsp;</span><span style="COLOR: #ff0000">style</span><span style="COLOR: #0000ff">="position:&nbsp;absolute;&nbsp;top:&nbsp;10;&nbsp;right:&nbsp;10;&nbsp;width:&nbsp;148;&nbsp;height:&nbsp;18;cursor:hand"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<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"</span><span style="COLOR: #ff0000">&nbsp;name</span><span style="COLOR: #0000ff">="Button"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="查看源代码"</span><span style="COLOR: #ff0000">&nbsp;onClick</span><span style="COLOR: #0000ff">=&nbsp;'window.location&nbsp;=&nbsp;"view-source:"</span><span style="COLOR: #ff0000">&nbsp;+&nbsp;window.location.href'</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span></div>
<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">script&nbsp;</span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;<br>window.onbeforeunload&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;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">author:&nbsp;meizz&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;n&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;window.event.screenX&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;window.screenLeft;&nbsp;<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;n&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;document.documentElement.scrollWidth</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">20</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;&nbsp;<br></span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(b&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;&amp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;window.event.clientY&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</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;window.event.altKey)&nbsp;<br>{&nbsp;<br>alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">是关闭而非刷新</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);&nbsp;<br>window.event.returnValue&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</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;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">这里可以放置你想做的操作代码&nbsp;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}&nbsp;<br>}&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div><br>
<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-30 16:23 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/30/34258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>超链接js事件导致IE6中GIF动画停止的解决办法</title><link>http://www.cnitblog.com/yemoo/archive/2007/09/28/34142.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Fri, 28 Sep 2007 04:26:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/28/34142.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34142.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/28/34142.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34142.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34142.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>其实这个也是曾经让俺头疼的一个问题，当时怎么都找不到原因，后来才知道这是IE6浏览器的一个bug，不过后来也没有在注意过这个问题。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今日在蓝色经典发现有网友遇到了同样的问题，而且下面的回复者似乎也都不太清楚是什么造成，感觉还是有很多朋友会遇到这种问题的。于是在此对此bug出现的原因解释下下希望对各位有用！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;造成GIF停止的代码语句一般都是如下形式：
<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">a&nbsp;</span><span style="COLOR: #ff0000">href</span><span style="COLOR: #0000ff">="javascript:函数调用或js语句"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">超链接</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">a</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你的gif突然停止，请检查您的代码是否有类如上面的语句调用!<br>&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #0000ff">尽管将js语句直接写在链接的href属性上是允许的，但有时就会造成页面gif动画全部停止的现象。</span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此建议将js还是写在元素的事件上更合适，如<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">a&nbsp;</span><span style="COLOR: #ff0000">onclick</span><span style="COLOR: #0000ff">="函数调用或js语句;return&nbsp;false"</span><span style="COLOR: #ff0000">&nbsp;href</span><span style="COLOR: #0000ff">="#"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">超链接</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">a</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>这样就可以避免gif停止的问题了。<br>
<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34142.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-28 12:26 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/28/34142.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不能同时打开多个全屏窗口的解决办法</title><link>http://www.cnitblog.com/yemoo/archive/2007/09/27/34076.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Thu, 27 Sep 2007 01:21:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/27/34076.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34076.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/27/34076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34076.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34076.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><br>您的系统登陆后是否是全屏的？如果是，您是否发现当保持你已经登入的系统全屏窗口后再次通过系统登录时仍然是一个全屏窗口，或者直接全屏窗口变成白板？或者提示&#8220;拒绝访问&#8221;的js错误？<br><br>偶所在公司的一些项目都出现了这种问题，当一个系统在一个机器上同时登录多个帐号（弹出多次全屏窗口）时，新开的窗口会将之前的全屏刷成白板。开始以为是IE的bug，没多在意，之后发现很多人都提这个问题，于是决定去探究下是否有解决办法。想到window.open弹出全屏，首先想到是否窗口名冲突，开始查看window.open的调用，找到如下代码：<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">workspace&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;window.open(targetURL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">workspace</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fullscreen=0,menubar=0,toolbar=0,directories=0,location=0,status=1,scrollbars=0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div>
<br>想想不可能是workspace变量冲突，因为它只是一个页面级变量，新开的页面不会和之前页面定义的变量冲突，在看发现了window.open的第二个参数workspace，这个参数的意义之前我没有在意过，以为没有什么意义，突然感觉这个应该是代表窗口的名字，以便程序可以通过该名字来识别该窗口。如果定义了这个名字，那么在第二次弹出窗口时因为能找到workspace窗口所以并没有重新打开而是在workspace页面内重新写内容了。完全正确。之后偶特意写代码测试了。当然，这样就好解决了，只要把这个参数省略或定义不同的名字就可以解决这个问题。<br><br>看下面的测试：<br><a href="http://www.ajaxbbs.net/test/testWindowOpen/sameArg2.html" target=_blank><font color=#0000ff><u>window.open的第二个参数定义了相同名字</u></font></a><br><br><a href="http://www.ajaxbbs.net/test/testWindowOpen/noArg2.html" target=_blank><u><font color=#0000ff>window.open的第二个参数定义了不同名字</font></u></a>
<p><script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script></p> <img src ="http://www.cnitblog.com/yemoo/aggbug/34076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-27 09:21 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/27/34076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现JS对象的克隆 </title><link>http://www.cnitblog.com/yemoo/archive/2007/09/25/34018.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 25 Sep 2007 10:32:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/25/34018.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34018.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/25/34018.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34018.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34018.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在js里没有类似JAVA的clone方法，无法实现对对象的克隆，一般使用等号操作符来传递对象，但这样就造成了指针关联问题，修改任何一个对象，其关联的对象也会被改变，但很多时候我们只想得到一个对象的拷贝，而非引用。今日偶就遇到了这个问题，以前还真没有注意过这个，朋友给找了两个方法，感觉写的都不错。只是实现稍有不同，但大体原理是相对的，即<span style="COLOR: red">逐项复制对象内容</span>。<br>相信这段代码对很多web开发的朋友都会有用。</p>
<p><strong>方法一：定义一个clone方法来实现。</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">function</span><span style="COLOR: #000000">&nbsp;clone(myObj){<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(myObj)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;'object')&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;myObj;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(myObj&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: #0000ff">return</span><span style="COLOR: #000000">&nbsp;myObj;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;myNewObj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Object();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;myObj)<br>&nbsp;&nbsp;&nbsp;&nbsp;myNewObj[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;clone(myObj[i]);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;myNewObj;<br>}</span></div>
<p><br><strong>方法二：通过object原型扩展实现</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: #000000">Object.prototype.Clone&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;objClone;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;Object&nbsp;)&nbsp;objClone&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;objClone&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.constructor(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.valueOf());&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;key&nbsp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">&nbsp;)<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;(&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key]&nbsp;)<br>&nbsp;&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">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key])&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;'object'&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key].Clone();<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objClone[key]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">[key];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;objClone.toString&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.toString;<br>&nbsp;&nbsp;&nbsp;&nbsp;objClone.valueOf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.valueOf;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;objClone;&nbsp;<br>}&nbsp;&nbsp;</span></div><p>
<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-25 18:32 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/25/34018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>function, new function, new Function【转自鸟食轩】</title><link>http://www.cnitblog.com/yemoo/archive/2007/09/25/34017.html</link><dc:creator>Yemoo'S JS Blog</dc:creator><author>Yemoo'S JS Blog</author><pubDate>Tue, 25 Sep 2007 10:30:00 GMT</pubDate><guid>http://www.cnitblog.com/yemoo/archive/2007/09/25/34017.html</guid><wfw:comment>http://www.cnitblog.com/yemoo/comments/34017.html</wfw:comment><comments>http://www.cnitblog.com/yemoo/archive/2007/09/25/34017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yemoo/comments/commentRss/34017.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yemoo/services/trackbacks/34017.html</trackback:ping><description><![CDATA[<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg1.js"></script><br><p>函数是JavaScript中很重要的一个语言元素，并且提供了一个function关键字和内置对象Function，下面是其可能的用法和它们之间的关系。</p>
<p><strong>使用方法一：</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">var</span><span style="COLOR: #000000">&nbsp;foo01&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: #008000">//</span><span style="COLOR: #008000">or&nbsp;fun01&nbsp;=&nbsp;function()</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp;<br>}<br><br>alert(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(foo01));<br>alert(foo01());&nbsp;<br><br></span></div>
<p>&nbsp;&nbsp; <br><span style="COLOR: #0000ff">运行结果：</span><br>function<br>300&nbsp; <br>最普通的function使用方式，定一个JavaScript函数。两种写法表现出来的运行效果完全相同，唯一的却别是后一种写法有较高的初始化优先级。在大扩号内的变量作用域中，this指代foo01的所有者，即window对象。</p>
<p><strong><br>使用方法二：</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">var</span><span style="COLOR: #000000">&nbsp;foo02&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp;<br>}<br><br>alert(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(foo02));<br>alert(foo02.constructor());&nbsp;&nbsp;&nbsp;<br><br></span></div>
<p><br><span style="COLOR: #0000ff">运行结果：</span> <br>object<br>300&nbsp; <br>这是一个比较puzzle的function的使用方式，好像是定一个函数。但是实际上这是定一个JavaScript中的用户自定义对象，不过这里是个匿名类。这个用法和函数本身的使用基本没有任何关系，在大扩号中会构建一个变量作用域，this指代这个作用域本身。</p>
<p><strong><br>使用方法三：</strong>&nbsp; </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;foo3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Function('</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp;');<br>alert(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(foo3));<br>alert(foo3());&nbsp;</span></div>
<p>&nbsp; <br><span style="COLOR: #0000ff">运行结果：</span>&nbsp; <br>function<br>300&nbsp;&nbsp;<br>使用系统内置函数对象来构建一个函数，这和方法一中的第一种方式在效果和初始化优先级上都完全相同，就是函数体以字符串形式给出。<br></p>
<p><strong>使用方法四：</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">var</span><span style="COLOR: #000000">&nbsp;foo4&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Function('</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;temp&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.temp;');<br><br>alert(</span><span style="COLOR: #0000ff">typeof</span><span style="COLOR: #000000">(foo4));<br>alert(foo4());<br></span></div>
<p><br><span style="COLOR: #0000ff">运行结果：</span></p>
<p>function<br>300 <br>&nbsp;&nbsp; <br>这个方式是不常使用的，效果和方法三一样，不过不清楚不用new来生成有没有什么副作用，这也体现了JavaScript一个最大的特性：灵活！能省就省。<br></p>
<script type="text/javascript" src="http://www.cnitblog.com/Files/yemoo/gg2.js"></script><img src ="http://www.cnitblog.com/yemoo/aggbug/34017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yemoo/" target="_blank">Yemoo'S JS Blog</a> 2007-09-25 18:30 <a href="http://www.cnitblog.com/yemoo/archive/2007/09/25/34017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>