<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Answer to Life, the Universe, and Everything</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/47127/rss</id><updated>2011-03-11T06:54:36Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/47127/rss"/><entry><id>http://www.cnblogs.com/Lion5859/archive/2011/03/11/1981443.html</id><title type="text">常用网络图像格式的比较和选择</title><summary type="text">在前端开发中，你常常会发现某些图像以A格式储存效果较好，而另一些以B格式储存效果较好。（注：这里的“效果”，指对图像文件大小和图像质量的综合考量。）因为压缩算法的不同，格式的效果会因内容而异。因为这种相关性，我们把图像按其内容特点分为几类，并分析各类图像用哪种格式储存的效果最好。图像按其内容特点分类如下：文字和图形照片渐变 简单渐变（横向、纵向线性渐变）复杂渐变文字和图形文字和图形的特点是颜色简单，有清晰的边缘。 GIF：2.306K，PNG-8：1.963K，PNG-24：3.715K 放大4倍GIF、PNG-8、PNG-24 都是无损格式，图像质量一样，所以用同一张图显示。 0品质 JPG</summary><published>2011-03-11T06:55:00Z</published><updated>2011-03-11T06:55:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2011/03/11/1981443.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2011/03/11/1981443.html"/><content type="html">&lt;p&gt;在前端开发中，你常常会发现某些图像以A格式储存效果较好，而另一些以B格式储存效果较好。（注：这里的&amp;#8220;效果&amp;#8221;，指对图像文件大小和图像质量的综合考量。）&lt;/p&gt;&#xD;
&lt;p&gt;因为压缩算法的不同，格式的效果会因内容而异。因为这种相关性，我们把图像按其内容特点分为几类，并分析各类图像用哪种格式储存的效果最好。&lt;span id="more-27"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;图像按其内容特点分类如下：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;文字和图形&lt;/li&gt;&lt;li&gt;照片&lt;/li&gt;&lt;li&gt;渐变 &#xD;
&lt;ul&gt;&lt;li&gt;简单渐变（横向、纵向线性渐变）&lt;/li&gt;&lt;li&gt;复杂渐变&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;文字和图形&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;文字和图形的特点是颜色简单，有清晰的边缘。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_59" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic1-png8.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;GIF：2.306K，PNG-8：1.963K，PNG-24：3.715K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_60" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic1-png8-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;GIF、PNG-8、PNG-24 都是无损格式，图像质量一样，所以用同一张图显示。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_56" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic1-jpg0.jpg" width="200" height="200" /&gt; &#xD;
&lt;p &gt;0品质 JPG：2.345K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_57" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic1-jpg0-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_58" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic1-jpg60.jpg" width="200" height="200" /&gt; &#xD;
&lt;p &gt;60品质 JPG：5.214K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_55" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pci1-jpg60-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;可以看出，GIF、PNG-8、PNG-24 是图像质量最好的，其中 PNG-8 文件最小。即使最低品质的 JPG 也比 PNG-8大，把 JPG 的品质提高到 60，图像质量仍与 PNG-8 有差距，大小却达到了 PNG-8 的2.7倍，由此可见 JPG 格式储存这类图像的局限性。&lt;/p&gt;&#xD;
&lt;p&gt;综合来看，&lt;strong&gt;对于文字和图形，无论从图像质量来说还是文件大小来说， PNG-8 都是最佳选择。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;照片&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;照片的特点是颜色丰富且颜色分布无规律。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_74" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-png8.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;GIF：28.24K，PNG-8：23.74K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_75" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-png8-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;GIF、PNG-8的图像质量一样，所以用同一张图显示。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_76" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-png24.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;PNG-24：67.58K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_77" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-png24-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="width: 210px" id="attachment_72" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-jpg60.jpg" width="200" height="200" /&gt; &#xD;
&lt;p &gt;品质60 JPG：12.59K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 210px" id="attachment_73" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic2-jpg60-z.png" width="200" height="200" /&gt; &#xD;
&lt;p &gt;放大4倍&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;观察 GIF 和 PNG-8 的放大图，可以看到细节有明显损失，原有的平滑颜色过渡变成生硬的单一颜色。这是因为 GIF 和 PNG-8 都是8位图像格式，只能存储256种颜色，当图像颜色超过256色时，相近的几个颜色会被合并成一个，直到颜色总数不超过256色为止。&lt;/p&gt;&#xD;
&lt;p&gt;PNG-24 是无损真彩色格式，所以 PNG-24 压缩后能保持和原图质量一样，完全不失真，但付出的代价是极低的压缩比，这张 200 &amp;#215; 200 的图像竟有 67.58k，这是在前端开发中无法接受的。&lt;/p&gt;&#xD;
&lt;p&gt;最后是 JPG，放大图可以看出其相较 PNG-24 有轻微的失真，但比 PNG-8 好很多，在原大小下完全看不出和 PNG-24 有区别。而 JPG 的大小不到 PNG-24 的 1/5，所以说 &lt;strong&gt;JPG 是存储照片最理想的格式&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;PNG-8 是 GIF 的改进格式，它们的图像质量都是一样的，在几乎所有情况下，PNG-8 的压缩率都比 GIF 略胜一筹，PNG-8 完全可以替代 GIF，所以后文将不再比较 GIF 格式。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;简单渐变（横向、纵向线性渐变）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div style="width: 510px" id="attachment_167" &gt;&lt;a href="http://frully.org/wp-content/uploads/2010/05/pic3-png8.png"&gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-png8.png" width="500" height="50" /&gt;&lt;/a&gt; &#xD;
&lt;p &gt;PNG-8：1.503K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_169" &gt;&lt;a href="http://frully.org/wp-content/uploads/2010/05/pic3-png24.png"&gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-png24.png" width="500" height="50" /&gt;&lt;/a&gt; &#xD;
&lt;p &gt;PNG-24：0.619K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_165" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-jpg60.jpg" width="500" height="50" /&gt; &#xD;
&lt;p &gt;60品质 JPG：1.97K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_168" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-png8-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-8 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_170" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-png24-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-24 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_166" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic3-jpg60-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;60 品质 JPG 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p id="firstHeading"&gt;在原图下看不出 3 种格式有何区别。但是比较放大图，可以看出 PNG-8 有比较明显的带状颜色条，这是由于储存的颜色不足引起的。JPG 相对较好，虽然有些不自然过渡，但是不太明显。质量最好的依然是 PNG-24，但奇怪的是，它的文件大小也比前两个格式小很多。我猜测是 PNG-24 使用的算法特别适合用于这种线性重复的图像。&lt;/p&gt;&#xD;
&lt;p&gt;不论如何，&lt;strong&gt;PNG-24在图像质量和文件大小两方面都有优势，是储存横向、纵向渐变的最佳格式。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;复杂渐变&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里说的复杂渐变包括非水平垂直的线性渐变、径向渐变、角度渐变等。&lt;/p&gt;&#xD;
&lt;div style="width: 510px" id="attachment_173" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-png8.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-8：3.762K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_175" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-png24.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-24：10.14K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_171" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-jpg60.jpg" width="500" height="50" /&gt; &#xD;
&lt;p &gt;60 品质 JPG：2.701K&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_174" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-png8-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-8 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_176" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-png24-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;PNG-24 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div style="width: 510px" id="attachment_172" &gt;&lt;img  alt="" src="http://frully.org/wp-content/uploads/2010/05/pic4-jpg60-z.png" width="500" height="50" /&gt; &#xD;
&lt;p &gt;60 品质 JPG 放大8倍&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p&gt;这幅图是把上幅图的线性渐变改为径向渐变得来的。&lt;/p&gt;&#xD;
&lt;p&gt;观察放大图，图像质量和简单渐变的一样，PNG-8 在左上角圆心处颜色已经失去过渡，连成一块。PNG-24 图像质量依然是最好的。理论上 JPG 的图像质量会比 PNG-24 差些，但是即使是在8倍放大图上，差异也非常不明显。&lt;/p&gt;&#xD;
&lt;p&gt;从文件大小上看，PNG-24 变化非常大，从之前的 0.619K 上升到 10.14K，而 JPG 变化很小，从 1.97K 上升到 2.701K。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;实际上复杂渐变的颜色分布类似于照片，对图像压缩算法来说，都是无规则的，所以 JPG 得以在这类图像上得到最好的效果。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;PNG-8&lt;/strong&gt;，即 8位（256色） PNG 格式。 PNG-8 擅长存储颜色简单、边缘明确的文字和图形，由于 PNG-8 只能储存256种颜色，所以在存储颜色丰富的照片时，会丢失颜色，导致图像失真。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;GIF&lt;/strong&gt;，GIF 和 PNG-8 非常相似，主要区别在 PNG-8 算法比 GIF 好，所以压缩比较高，除了动画，所有可以用 GIF 的场合都应该用 PNG-8 代替。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;PNG-24&lt;/strong&gt;，即 24位 PNG 格式，这是真正的无损压缩格式，不会像8位格式一样丢失颜色，也不会像 JPG 一样模糊边缘，可以完全保持原图质量。只是在多数情况下，这种格式产生的文件比其他格式大很多。在储存简单渐变时，PNG-24 产生的图像质量、大小都非常完美。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;JPG&lt;/strong&gt;，有损压缩格式。储存照片有较好的效果，对有清晰边缘的文字和图形的储存则不尽理想。可以通过降低图像质量来提高压缩比，压缩比较高时，会产生明显的不自然痕迹。&lt;/p&gt;&#xD;
&lt;table border="1" width="250"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th scope="col"&gt;图像&lt;/th&gt;&#xD;
&lt;th scope="col"&gt;适用格式&lt;/th&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;文字和图形&lt;/td&gt;&#xD;
&lt;td&gt;PNG-8&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;照片&lt;/td&gt;&#xD;
&lt;td&gt;JPG&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;简单渐变&lt;/td&gt;&#xD;
&lt;td&gt;PNG-24&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;复杂渐变&lt;/td&gt;&#xD;
&lt;td&gt;JPG&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1981443.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2011/03/11/1981443.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/archive/2010/05/21/1741221.html</id><title type="text">IT出路（转帖）</title><summary type="text">恭喜，你选择开发工程师做为自已的职业　　悲哀，你选择开发工程师做为自已的职业 　　本文所指的开发工程师，仅指程序开发人员和以数字电路开发为主的电子工程师。　　当你选择计算机或者电子、自控等专业进入大学时，你本来还是有机会从事其它行业的，可你毕业时执迷不悟，仍然选择了开发做为你的职业，真是自做孽不可活。不过，欢迎你和我一样加入这个被其它人认为是风光无限的&amp;#8220;白领&amp;#8221;吧。　　如果你...</summary><published>2010-05-21T13:27:00Z</published><updated>2010-05-21T13:27:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2010/05/21/1741221.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2010/05/21/1741221.html"/><content type="html">恭喜，你选择开发工程师做为自已的职业&lt;br /&gt;　　悲哀，你选择开发工程师做为自已的职业 &#xD;
&lt;p&gt;本文所指的开发工程师，仅指程序开发人员和以数字电路开发为主的电子工程师。&lt;br /&gt;　　当你选择计算机或者电子、自控等专业进入大学时，你本来还是有机会从事其它行&lt;br /&gt;业的，可你毕业时执迷不悟，仍然选择了开发做为你的职业，真是自做孽不可活。不过&lt;br /&gt;，欢迎你和我一样加入这个被其它人认为是风光无限的&amp;#8220;白领&amp;#8221;吧。&lt;/p&gt;&#xD;
&lt;p&gt;如果你不是特别的与人世隔绝，我想你一定看过金老先生的名著《笑傲江湖》吧，&lt;br /&gt;里面有一门十分奇特的武功叫做"辟邪剑法"，你看这个小说第一次看到这种功夫的练法&lt;br /&gt;时，我想你当时一定笑歪了牙&amp;#8220;呵呵，真好玩！&amp;#8221;，可是现在我很痛心的告诉你：你选&lt;br /&gt;择的开发工作就是你人生路上的"辟邪剑法"，而你现在已经练了，并且无法再回头。&lt;br /&gt;　　相对同时刚出校门同学从事其它行业而言优厚的薪水，以及不断学习更新的专业知&lt;br /&gt;识不仅仅让你感到生活的充实，更满足了你那不让外人知的虚荣心。在刚出校门的几年&lt;br /&gt;中，你经常回头看看被你落在后面的同学们，在内心怜悯他们的同时，你也会对自已天&lt;br /&gt;天加班的努力工作感到&lt;br /&gt;心里平衡：&amp;#8220;有付出才会有回报&amp;#8221;这句话在那几年中你说的最多，不管是对自已的朋友&lt;br /&gt;们还是自已的爱人。第二句最常说的话是对公司的领导：&amp;#8220;不行我就走人！&amp;#8221;，实际上&lt;br /&gt;你也真的走过几回。对了，在这几年中，因为你的经济条件不错，你开始买房、开始谈&lt;br /&gt;恋爱、结婚、开始有了自已的小孩。有时候你会对自已说再过两年就去买车。当然其中&lt;br /&gt;可能有许多大件是需要分期付款的，但你对前途充满了信心，你确信认为这种日子会永&lt;br /&gt;远的持续下去，即使不是变得更好的话。&lt;/p&gt;&#xD;
&lt;p&gt;日子总是在这种平淡中一天天的过去，就在那么不经意间，你突然发现自已已经快3&lt;br /&gt;0岁了，或者已经30了，莫名的，你心里会漫延着一种说不清楚的不安情绪，你好像觉得&lt;br /&gt;前途并非像前几年那样变得越来越好，你也忽然发现你以前所瞧不起的同学里好像已经&lt;br /&gt;有不少开着车的了，也有几个人住着比你还大的房子，好像房款还是一次付清的，你突&lt;br /&gt;然明白你现在的生活比起你的同学来最多是中游偏上了。工作中最让你感到心里不舒服&lt;br /&gt;的是，你越来越不敢对你的领导说不了，即使比你来的晚的同事升职或提薪，你也只是&lt;br /&gt;在私下与朋友们一起喝酒时才敢发发牢骚，在头的面前你的声间越来越小、笑脸是越来&lt;br /&gt;越温柔。&lt;/p&gt;&#xD;
&lt;p&gt;你终于开始迷茫&amp;#8220;再过几年我会是在干什么呢？&amp;#8221;，这句话常常出现在你的心里。&lt;br /&gt;　　计算机开发工作，是一种以年轻为资本的工作，说句通俗点的话是&amp;#8220;吃青春饭的&amp;#8221;&lt;br /&gt;，嗯，这句话好像在一种特别的行业也听到过。&lt;/p&gt;&#xD;
&lt;p&gt;其标志就是一：工作的时间性非常强，一个开发项目被定的时限通常是很紧张的，更有&lt;br /&gt;甚者，有些号称开发管理的书里面还非常卑鄙的号召将一个项目切成多个小片，每个小&lt;br /&gt;片都定一个叫&amp;#8220;里程碑&amp;#8221;的东东来严格跟踪开发进度，加班加点在其它行业是需要加班&lt;br /&gt;工资的，而在开发行业，加班工资好像还没见到几个公司发过，是啊，反正有时间限制&lt;br /&gt;着，你干不完我再找你算账.所以开发工作通常有着其它工作所没有的精神上的压力。&lt;/p&gt;&#xD;
&lt;p&gt;一旦一个人步入而立之年，因为家庭和孩子的负担，加上精力上面的衰退，加班工作时&lt;br /&gt;间变得越来越少，这点让很多老板们感到：这些人已经老了，不好用了。指示人事部门&lt;br /&gt;：&amp;#8220;以后招开发人员限制在30岁以下！&amp;#8221;，相对而言硬件开发会年龄方面限制会稍好一&lt;br /&gt;点点，但也是五十步笑百步。还有一个很重要的一点就是：计算机这个烂东东实在是进&lt;br /&gt;步的太快了，前两年买的顶级配置电脑，现在怎么看怎么像废品，这还是小事，更可气&lt;br /&gt;的是好像每天都需要学习新的知识，刚毕业时只会书本上的PASCAL，学会了用腐蚀的办&lt;br /&gt;法来做电路板，一上班就开始学习TURBOC和TANGER2.0，刚刚学会，还没来得及高兴，马&lt;br /&gt;上开始学Borland&amp;nbsp;C＋＋和Protel3.0，好不容易学会了，却发现需要学习VC和Protel98&lt;br /&gt;了。单片机也是啊：Z80的指令背的很熟，工作中没来得及用就要学8031，好好学吧，本&lt;br /&gt;来想着这辈子就吃它了，又发现又出来什么PIC、DSP、CPLD、FPGA、ARM等等....这还不&lt;br /&gt;包括中间要学一大堆74系列、4000系列、XX系列...IC卡居然里面还有CPU卡..如果学习&lt;br /&gt;的知识里每个字都能变成一分钱，我想所有的开发工程师都是腰缠万贯的富翁。&lt;/p&gt;&#xD;
&lt;p&gt;一眼看去，这种日子好像见不到头，年轻时乐此不彼，但现在你一定对自已能坚持&lt;br /&gt;到什么时候感到怀疑了。我们都玩过像仙剑奇侠传这样的RPG游戏，刚开始时你只是一个&lt;br /&gt;一名不文的少年，随着你去打怪物、捡宝贝、学秘芨，最后终于有一天你会变成一个大&lt;br /&gt;英雄！那么你在实际生活中过得比那些小侠们还辛苦，为什么成不了一个生活中的大侠&lt;br /&gt;呢？呵呵，原因在这里：因为开发工作是邪门功夫，它虽然可以让你速成的变成小资，&lt;br /&gt;但它最大的特点是经验不积累！日新月异的知识更新，让你总是感到自已在退步，你就&lt;br /&gt;像在RPG中的主人公，开始时就给了你一把好剑和好盔甲，而且让你的级别很高，但让你&lt;br /&gt;的经验不累积，虽然刚开始打小怪物时你觉得自已很爽，但越到后来，你会发现你会死&lt;br /&gt;的很惨！比较一下你与其它非开发行业的同学你就可以知道了，例如和你学医的同学比&lt;br /&gt;起来。套用岳不群他老人家说华山剑宗和气宗的区别那段话：前十年你比你那些学医的&lt;br /&gt;同学收入和地位要好的多，但十年以后你和他基本上各方面都会持平，而二十年以后你&lt;br /&gt;的各方面远远不能与你学医的同学相提并论！嗯，你已经开始不笑辟邪剑法了吧。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8220;敢问路在何方？路在脚下...&amp;#8221;，不过猴兄和八戒兄这么认为是可以的，你呢？&lt;br /&gt;总结了许多开发朋友在30岁以后的生活之路，让我们一起看看开发人员&amp;#8220;路在何方？&amp;#8221;&lt;br /&gt;那么开发人员在30岁以后都干些什么呢？&lt;/p&gt;&#xD;
&lt;p&gt;其路一：继续做你这个很有&amp;#8220;前途&amp;#8221;的职业吧！&lt;br /&gt;　　偶掰着脚指头仔细数了数，发现还真的有很多朋友在30岁以后还在从事开发工作，&lt;br /&gt;我这里说的从事，是指你还需要天天在电脑边上编程序和画电路板，与你手下是否有几&lt;br /&gt;个小兵无关，也与你是否头上顶着什么项目经理、主任工程师的帽子无关，只要你还需&lt;br /&gt;要亲自开发，你就属于这一类。其中有个年龄最大的朋友是63年的，从事医疗仪器的开&lt;br /&gt;发工作，35岁左右还在从事软硬件开发工作的仍有一大堆，分析这些仍然从事开发的朋&lt;br /&gt;友，基本上都有以下特点：&lt;br /&gt;1　痴迷工作或者痴迷电脑，晚上八点到十二点的这段时间，基本上是在电脑桌或工作台&lt;br /&gt;前渡过的。&lt;br /&gt;2　不喜欢与人交住，朋友很少，常联系的人不超过五个。&lt;br /&gt;3　与朋友交往时谈工作多，但一般不主动谈钱。&lt;br /&gt;4　体型偏胖或偏廋，不在正常区间。&lt;br /&gt;5　无未来计划，对五年后自已生活怎么样、从事什么工作说不清楚。&lt;br /&gt;6　俭省，从不乱花钱。&lt;br /&gt;即使你是还不到30岁的开发人员，你也可以看看自己对以上几条是否符合，是否会在30&lt;br /&gt;岁后还从事开发职业，四条疑似，五条以上基本确诊你也是这类型的人。&lt;br /&gt;　&amp;nbsp;这些朋友们通常报着过一天是一天的态度生活，到了这个年龄，也不敢再轻易的换工&lt;br /&gt;作了，年轻时的锐气慢慢的也消退了。唯一不变的希望是有一天从天上掉下来一大堆钱&lt;br /&gt;把自己砸伤。说实在话因为他们的性格所限，基本上可以确定他们以后不可能在职场上&lt;br /&gt;获得更好的发展，当个小头头，带几个人开发已经是他们发展的顶点。至于以后的人生&lt;br /&gt;之路，不仅他们自己迷茫，可能上帝也正在头痛。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;不过像这类朋友，偶很奇怪的发现：他们的小孩都是儿子！不知是偶然还是有什么其&lt;br /&gt;它说法。&lt;br /&gt;简单建议：要改变命运，先改变性格：坚持半年晚上不从事工作、游戏及电视，用此时&lt;br /&gt;间与人交往，你的人生会有改变。&lt;/p&gt;&#xD;
&lt;p&gt;其路二：转行从事技术支持、行政或生产等工作还有一些朋友，从事了几年的开发工作&lt;br /&gt;，因为自已并非特别的爱好，或者领导上面的强制工作安排，他们转到了技术支持、服&lt;br /&gt;务或行政等工作，至少当时从表面上看起来，他们的薪水较开发要少一些，但真正的统&lt;br /&gt;计这些人，发现他们之中有半数的人获得了更好的发展，升职为服务部经理或行政经理&lt;br /&gt;等职，最历害的一个朋友已升职为总经理助理，进入高层。&lt;br /&gt;　　这类朋友当时转行通常并非自已志愿，属被逼无奈或者其它原因，但显然，拥有专&lt;br /&gt;业知识技术的他们显然在非技术部门中鹤立鸡群，遇到什么事情他们均可从专业的角度&lt;br /&gt;提出建言，久而久之，他们获得更多的升职和加薪机会也就不足为奇。&lt;br /&gt;　　因为不从事开发，所以经验开始积累，这类的职业通常会给你一个很安定的感觉，&lt;br /&gt;你到30多岁后会发现这类职业反而比开发工作更容易获得新的工作机会。&lt;/p&gt;&#xD;
&lt;p&gt;简单建议：你如果确定在开发部无法获得很好的发展机会，不妨转到其它几个部门&lt;br /&gt;试试，换个活法，钱少点就少点吧，机会多。&lt;/p&gt;&#xD;
&lt;p&gt;其路三：开发管理&lt;br /&gt;　　如果你现在已经是总工或开发部经理，或者你眼看就有机会被提升为这类职务，那&lt;br /&gt;么恭喜你，你走的是从&amp;#8220;弼马温&amp;#8221;到&amp;#8220;斗战胜佛&amp;#8221;这条金光大路，你不仅拥有很高的专&lt;br /&gt;业技能，而且很显然，你也有着很强的人际交往能力，你这类人根本不需要对未来有着&lt;br /&gt;任何的担心，你在即使一无所有的时候也很容易白手起家。&lt;br /&gt;　　你这种人算是练辟邪剑法练成了仙，嗯，我无话可说。&lt;br /&gt;　　你是不是这类人也很容易区别，就像围棋二十岁不称国手终身无望一样，你应该在&lt;br /&gt;工作三、四年以后，也就是说二十七岁左右就会发现自已工作中指手划脚的时间比亲自&lt;br /&gt;开发的时间要多了，而且大多数这类人在这个年龄手下应该有&amp;#8220;兵&amp;#8221;了，相反的，如果&lt;br /&gt;你快30岁了还天天埋头于电脑前编程序和画板子，或者30多岁了你还没升到部门经理（&lt;br /&gt;虽然你总是觉得自已很有希望），基本上可以确定你不是这类人。好了，如果你确定你&lt;br /&gt;是这类人，那么你唯一的想法就是尽快爬上中层和高层，因为有时候人生偶然性太大，&lt;br /&gt;不占住坑的萝卜很有可能被人拔出来！&lt;/p&gt;&#xD;
&lt;p&gt;简单建议：天天去你的老板家里面拖地和擦桌子！&lt;/p&gt;&#xD;
&lt;p&gt;其路四：出国或考研&lt;br /&gt;　　有两个搞开发后出国的朋友，其中一个甚至打工打到了一个小公司总工的位置，数&lt;br /&gt;据库和软件方面水平巨牛，但仍感觉心里不踏实，于是将自己工作多年的钱忍痛掏出来&lt;br /&gt;，出国费加上机票大概将自已辛苦所攒的银子花完，然后又借了一些钱，在02年身上揣&lt;br /&gt;着一万美元跑去了加拿大，在加拿大不停的重复找工作，换工作，然后再找工作的循环&lt;br /&gt;，找的工作基本上与计算机无关，不过工资总是在1500加元左右，呵呵，折成人民币与&lt;br /&gt;他在国内打工拿的基本上差不多，不过租个地下室就花了300加元，然后吃吃喝喝，再买&lt;br /&gt;个电脑上上网这类的，基本每月平均还要倒贴一点。前段时间给我的邮件里说，现在身&lt;br /&gt;上花的差不多只有5、6000美元了，准备开个小公司，看看能不能往国内倒腾点东东，做&lt;br /&gt;最后一搏。另外一个朋友去澳州，时间稍早一些，先是大概摘了一年多的葡萄，后来总&lt;br /&gt;算找了个技术工作，每天的工作是画机械图纸，收入还算不错&lt;/p&gt;&#xD;
&lt;p&gt;将近3000澳元，买了个旧车，也算是过上了资本主义生活。不过前年回来一趟，唯一的&lt;br /&gt;感叹就是：在国外拿2000美元的生活，绝对不如在国内拿5000人民币的生活舒服。&lt;br /&gt;　　也有两个考研的朋友，不过其中一个严格的说不是做开发的出身，偏重于市场方面&lt;br /&gt;的工作性质，不过我的朋友里面考研的不多，只好凑两个人说说，一个考研后在北京找&lt;br /&gt;了个工作，每个月5、6000元钱，但还是做开发，生活仍然与没考研之前没有任何的改变&lt;br /&gt;，前途仍然没见到什么大亮的光，还是搞不清楚以后再干些什么，标准的过一天算一天&lt;br /&gt;了。另外一个考研后在大学里面找了个工作，工资虽然比他原来打工少了不少，但毕竟&lt;br /&gt;终身有靠，稳定了下来，也算修成了正果，这位哥们心情一放松下来，也开始有时间琢&lt;br /&gt;磨着业余时间自已做点什么，好像现在慢慢的也开始有了点眉目。&lt;br /&gt;　　简单建议：这两条路，对开发人员来说都不算是很好，出国十年前是好事，现在难&lt;br /&gt;说，考研能成功转行的概率恐怕也不是很大，多半仍然去搞开发，只不过研究生可以多&lt;br /&gt;干几年罢了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;其路五：转行到市场&lt;br /&gt;　　绞尽脑汁的想想，我所知道的人之中只有两个开发人员去了市场，这两个人都不能&lt;br /&gt;说是朋友，认识而已。他们都是主动要求去了市场，结果是这两个人均在市场都是干到&lt;br /&gt;一年左右，然后都自已开公司了。呵呵，很奇怪，极高的转行成功率！不过仔细想想，&lt;br /&gt;我对这两个人的思路佩服的五体投地。能下决心仍掉每月5、6000元的开发职位，从事一&lt;br /&gt;个自已并不熟悉的岗位，每月拿个2000多元＋提成，但提成那是说不清楚的事情，这个&lt;br /&gt;决定，只能让人感觉到他们对自已前途清晰的把握和老谋深算的心机。而且他们不去服&lt;br /&gt;务不去生产，挖空心思说服领导去市场（市场部门与开发部门通常是一个公司的核心部&lt;br /&gt;门，进入其实并不容易），可以说是有着长远的考虑的。有技术了，再与客户交成朋友&lt;br /&gt;，马上就会产生很大的机遇应该是正常的事情。&lt;br /&gt;　　有实力，有心机，也有着很强的决心力，这种人恐怕早在大学毕业时或更早的时候&lt;br /&gt;就已经决定了自已的人生之路，他们的每一步路在若干年前早就计划周全，现在看起来&lt;br /&gt;：学会技术－＞进入市场－＞寻找商机－＞开公司，一条多么清楚的人生之路。但就像&lt;br /&gt;我们上小学中学时，所有人都知道上大学是我们最清楚的人生路一样，最后只有少数人&lt;br /&gt;才能真正达到目标（当然，现在扩招的历害是另外一回事，我是说我们那个时候，也就&lt;br /&gt;是：&amp;#8220;很久很久以前，当我像你那么大的时候&amp;#8221;）。&lt;/p&gt;&#xD;
&lt;p&gt;简单建议：你若是这类人，我的建议是：...嗯?....那个你.你，你别走啊，我还有&lt;br /&gt;个事想请你赞助一下啊.....&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;其路六：开公司自已干&lt;/p&gt;&#xD;
&lt;p&gt;呵呵，看到这一条，发现你的眼睛已经圆了，你肯定千百次的想过这个事情吧，咳&lt;br /&gt;咳，其实我从事开发的时候也是天天梦想着这种事情。总想着过两年找个机会就自已干&lt;br /&gt;，这个梦想一年又一年的折磨着你也给着你希望。看看吧，开发后来开公司的还真的不&lt;br /&gt;少，里面有成功的也有很多失败的，通常开公司都是几个人合伙开始的，有做技术的，&lt;br /&gt;有做市场的，几个人一拍即合、狼狈为奸，共同策划了这一个大活动。一般说来能让这&lt;br /&gt;几个人下决心走出这一步，产品肯定是先进的，甚至是国内独一无二的，市场也是很大&lt;br /&gt;的，负责市场的那个哥们通常会拍着胸保证可以卖出去，并悄悄地告诉你他在某主管领&lt;br /&gt;导是他小舅子的同学的二叔，肯定没问题。于是你们几个人找地点、注册执照、买了几&lt;br /&gt;个破桌子，再攒了两台电脑，每个人又凑了几万银子，公司开张了！&lt;br /&gt;　　产品很快出来了，市场的哥们也不负重望，有几个客户表示要试用了，一切看起来&lt;br /&gt;都是如此的正常，&amp;#8220;.......你坐在老板桌前，不停的有人来汇报工作或者找你签字...&lt;br /&gt;人进人出中...你又想起公司再穷也不能只有一把椅子的故事.....&amp;#8221;你在梦中笑出声来&lt;br /&gt;。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;是如此的顺利，你们很快就有单子了，很快的单子让你们凑的那点钱不够了，你们&lt;br /&gt;很高兴的每个人又增加了投入，拿出钱时你眼泪汪汪的数着钱说：&amp;#8220;这就是我那生蛋的&lt;br /&gt;母鸡啊&amp;#8221;。你们的产品确实不错，市场也经营的很好，客户慢慢的多了起来，单子来的&lt;br /&gt;时候一笔接着一笔，你每天都处于兴奋之中，唯一美中不足的是好像客户回款总是会拖&lt;br /&gt;一些日子，不过客户给你保证说：过几天，过几天就付给你们，因为回款总是在计划外&lt;br /&gt;，所以你们为了资金的流畅运行又凑了一些钱，这个时候你有一些心事了，因为你的存&lt;br /&gt;款折上面的数字已经快趋向于零了。&amp;#8220;没事，过两个月等回款了一切都OK了，谁干事业&lt;br /&gt;不吃点苦呢？&amp;#8221;你这么安慰着自已又投入到工作中去，资金总是在回款和生产经营费用&lt;br /&gt;之间走着一个窄窄的小木桥，你的账上总是没有太多的钱，扩大了的公司规模和许多意&lt;br /&gt;外情况，使你又一次、二次、三次的与合作者们再次投入了自已的资金，当然，后来的&lt;br /&gt;钱你可能已经是借的了.....&lt;br /&gt;　　终于有一天，你的会计再一次告诉你，老板啊，账上又没现金了，吃过多次苦头的&lt;br /&gt;你终于下决心开始重视资金的运行了，你裁掉了一些不必要的人手，减少了开发的投入&lt;br /&gt;，要求市场人员签单的时候必须予付XX%的款，回扣也必须等收过款后再付，同时也开始&lt;br /&gt;对产品的生产成本开始进行控制。&lt;br /&gt;　　时间一天一天的过去，因为竟争对手的产品也对你的产品进行了仿造，你的产品慢&lt;br /&gt;慢变得不再先进，市场人员开始埋怨公司的合同资金方面规定太严格，不好签单，生产&lt;br /&gt;成本的下降通常也导至产品毛病的增多，客户也开始埋怨你的服务人员不能及时进行服&lt;br /&gt;务。&lt;br /&gt;　　终于有一天，你重新走进了人才交流中心，以前你是来招人的，现在你拿着自已的&lt;br /&gt;简历开始寻找一个工作&lt;br /&gt;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;公司的成功与否，与产品有关，与市场有关，但更重要的是与资金有关，产品与市&lt;br /&gt;场都可以通过资金来弥补，而却没有任何东西可以代替&lt;/p&gt;&#xD;
&lt;p&gt;资金，凡是倒下的公司，99%与资金链的断裂有关。在你决定要开公司以前，先估计一下&lt;br /&gt;你公司支持一年所需要的资金数额，包括人工费，生产，场地，广告宣传、市场费用、&lt;br /&gt;甚至电、水费等等等等，把你所想到的一切加在一起，得出的值就是..慢..如果你没有&lt;br /&gt;实际的开过公司的经验，你需要将此数字乘3，然后就是你开公司一年最少需要的费用，&lt;br /&gt;呵呵，公司的实际运营所需要的钱是你想像的3倍以上，你要是不信我也没办法。&lt;/p&gt;&#xD;
&lt;p&gt;简单建议：开公司前最重要的是先确立你后续的资金来源！也就是说钱不够了怎么&lt;br /&gt;办？－－－因为你投入的钱肯定会不够的。&lt;/p&gt;&#xD;
&lt;p&gt;其路七:第二职业&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;这类的朋友有不少,他们没有脱离开发工作,但是在业余时间又不停的接项目或者在&lt;br /&gt;卖产品,在单位里面他们显得并不出众,比起其它人来说他们属于最不愿意加班的一类.为&lt;br /&gt;此他们白天通常工作很勤奋.这类人也许不一定可以挣很多钱,但平均下来他们一年之中&lt;br /&gt;通常都可以比同事们多挣个几万元.有时候比上班拿得还多.但令人疑惑的是,这类人在生&lt;br /&gt;活中更加注重稳定,基本上没见到他们跳过蹧,即使私下里面已经开了个小公司,他们通常&lt;br /&gt;也不会辞职.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;你的旁边有没有这类人呢?分辨他们很容易:&lt;br /&gt;--电话很多,而且更愿意来电话时离开办公室找个没人的旮旯通话.神秘兮兮给人一种"这&lt;br /&gt;家伙是不是有二奶啊?"的感觉的人，通常是这类人。这类人是女性最佳的选择对象：很&lt;br /&gt;顾家，不象那些富人容易花心，而比起一般人来说，他们收入相对要高得多。但总结了&lt;br /&gt;一下几位这类的开发朋友：也得出了一个令人沮丧的结论：这种人通常个子不高，体形&lt;br /&gt;类似桶状.....&lt;/p&gt;&#xD;
&lt;p&gt;简单建议：这好像是开发人员最佳的出路了，但比较丰厚的收入通常让这类人不愿意&lt;br /&gt;去冒风险....到现在为止我所认识的这类人还没有一个真正算是成功的。&lt;/p&gt;&#xD;
&lt;p&gt;好了，虽然偶的经历远远说不上丰富，也没有什么成功之处可以自满的，但或许因为&lt;br /&gt;比其它朋友痴长了几岁，见过的人可能会稍多一些，所&lt;/p&gt;&#xD;
&lt;p&gt;以斗胆写出了以上的一些文字，让您掉牙了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;下面是偶走过开发这条路上总结出来的一点心得，你可以不看，但看了就千万别把嘴&lt;br /&gt;咧的太大：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;一、不管是给别人打工还是自已干，都要全心全意的工作，因为你所做的任何一点工&lt;br /&gt;作都会让自已的人生多一点筹码，这一点最最重要!这样的例子我至少可以举出两起，优&lt;br /&gt;秀的开发人员被其它新公司挖走，并给一定的股份，成为新公司的股东的例子。当时与&lt;br /&gt;这样的开发人员一个部门同时工作或更早工作的有许多人，他们平时经常偷点懒，能少&lt;br /&gt;干点工作就少干点，有时候还笑话那个平时努力工作的人傻，几年过去了，究竟谁比谁&lt;br /&gt;傻？&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;二、多与市场人员交朋友，你接触他们时可能总会觉得他们知识比你少，甚至素质比&lt;br /&gt;你低，可能比你还有点黄。但实际上他们比你更懂这个社会！参加到他们这个圈子中去&lt;br /&gt;，和他们一起赌赌钱、一起聊聊天、一起洗洗桑拿、一起.....你会通过他们接触到另外&lt;br /&gt;一个世界。&lt;br /&gt;在网上或其它地方，如果有机会参与到除本职工作外的一些项目或产品的开发中（包括&lt;br /&gt;你的朋友拉你去做点小生意之类的非开发性质的工作），那怕是帮忙的性质，也要积极&lt;br /&gt;介入，至少你会交到很多的朋友，这样你的人生会多出很多的机会。&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1741221.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2010/05/21/1741221.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/archive/2010/05/17/1737373.html</id><title type="text">Javascript动画基础</title><summary type="text">在当前的web应用中，我们可以看到Javascript动画效果得到了越来越多的应用。由于AJAX技术的流行，通过简单的动画效果提示用户当前正在执行的操作变得必要，例如最常见的效果就是颜色的渐变和元素大小的调整。当前许多主流的Javascript类库或框架中都包含了一些基本动画效果的接口，让我们使用这些效果变得更加容易，本文并不是针对这些接口的使用教程，而是尝试探讨一下使用Javascript实现动...</summary><published>2010-05-17T07:26:00Z</published><updated>2010-05-17T07:26:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2010/05/17/1737373.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2010/05/17/1737373.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;在当前的web应用中，我们可以看到Javascript动画效果得到了越来越多的应用。由于AJAX技术的流行，通过简单的动画效果提示用户当前正在执行的操作变得必要，例如最常见的效果就是颜色的渐变和元素大小的调整。&lt;/p&gt;&#xD;
&lt;p&gt;当前许多主流的Javascript类库或框架中都包含了一些基本动画效果的接口，让我们使用这些效果变得更加容易，本文并不是针对这些接口的使用教程，而是尝试探讨一下使用Javascript实现动画效果的基本原理和结构，希望能对需要自己实现一些自定义程度比较高的动画效果有一些帮助。&lt;/p&gt;&#xD;
&lt;p&gt;基于Javascript的动画其背后的基本原理是非常简单的。我们需要做的只是通过定义好的一组运动规则来操作DOM元素（例如&amp;gt;img&amp;lt;,&amp;lt;div&amp;gt;）在页面的区域上移动或是改变其相关的属性。&lt;/p&gt;&#xD;
&lt;p&gt;动画的基本原理是连续播放一组静态的图片从而产生动态的效果，其最基本的元素在于帧率。在其它一些语言里，例如C#或是Visual Basic，我们可以通过让相应进程sleep的方式来达到在一组动画的循环中控制帧率的效果。因此，实现动画效果的一组基本结构是执行如下的一组循环。&lt;span id="more-187"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: green"&gt;while&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;condition&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;doSomething&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;delay&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;sometime&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;doOther&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;但是在Javascript中我们并没有现成的函数接口来实现delay的效果，所以我们必须得借助于Javascript中window.setInterval来实现动画效果。在我们实现一个简单的动画效果的模式中，有这样几个原则是应该注意的：&lt;/p&gt;&#xD;
&lt;p&gt;1.避免使用全局变量，因为我们所提供的动画函数应该是可以同时应用于多个元素的。&lt;br /&gt;2.将元素对象作为参数传递，而不是传递元素的ID。&lt;br /&gt;3.注意线程安全的问题。我们通过setInterval和clearInterval的方式来实现当动画结束的时候，这个时钟将自动清除。并且需要保证同一类型的动画不会同时在多个实例上运行。&lt;/p&gt;&#xD;
&lt;p&gt;假设以一个简单的改变元素width属性的动画效果为示例，我们实现的函数应该是下面这个样子的：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;doWidthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;startW&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;endW&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;frames&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;delay&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;power&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;widthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: teal"&gt;window&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;clearInterval&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;widthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;cFrame&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: maroon"&gt;0&lt;/span&gt;&lt;span style="color: gray"&gt;; &lt;/span&gt;&lt;span style="color: #ffa500"&gt;// current frame&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;widthChangeAnimate&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: teal"&gt;window&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;setInterval&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: olive"&gt;(){&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;easeInOut&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;startW&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;endW&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;frames&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;cFrame&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;power&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;style&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;width&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: gray"&gt; +　&lt;/span&gt;&lt;span style="color: #8b0000"&gt;"&lt;/span&gt;&lt;span style="color: red"&gt;px&lt;/span&gt;&lt;span style="color: #8b0000"&gt;"&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;cFrame&lt;/span&gt;&lt;span style="color: gray"&gt;++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;cFrame&lt;/span&gt;&lt;span style="color: gray"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: blue"&gt;frames&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: teal"&gt;window&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;clearInterval&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;obj&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;widthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;, &lt;/span&gt;&lt;span style="color: blue"&gt;delay&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;在这个函数的接口当中，前三个参数的含义很好理解，第三个参数frames代表了这个动画效果将被划分为几帧来执行，第四个参数delay表示了两帧之间的时间间隔，通过这两个参数我们便可以有效的控制动画的帧率了。&lt;/p&gt;&#xD;
&lt;p&gt;obj的currentWidth是对元素本身的一个扩展，这是为了让元素能有记忆当前的状态。并且，当我们需要重复触发某个动画效果时，能够快速的恢复到元素的初始状态。例如我们对某个元素调用doWidthChangeAnimate的时候应该是这样的：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: blue"&gt;elem&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;onmouseover&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;doWidthChange&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;elem&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;onmouseout&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;doWidthRecover&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;doWidthChange&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt;!&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: maroon"&gt;100&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;doWidthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;200&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;24&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;10&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;0.5&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;doWidthRecover&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt;!&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: green"&gt;return&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;doWidthChangeAnimate&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;currentWidth&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;150&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;24&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;10&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;0.5&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;注意到上面的示例中doWidthChangeAnimate函数中调用了一个easeInOut函数来获取当前应该将元素的宽度设置为多少，这是因为在通常状况下，尽管我们可以按帧率计算出没一步应该增加的宽度平均值，但使用这个渐变平均值不一定能产生比较好的动画的效果，从动画理论的角度来说，其变化不应该是匀速的。所以我们通过一个函数来计算每一帧中所需要产生的变化，你可以自己选择合适的方式计算这个这个数值，一个可以参考的方式如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;easeInOut&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;min&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;max&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;frames&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;cFrame&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;power&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;delta&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;max&lt;/span&gt;&lt;span style="color: gray"&gt; - &lt;/span&gt;&lt;span style="color: blue"&gt;min&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;min&lt;/span&gt;&lt;span style="color: gray"&gt; + &lt;/span&gt;&lt;span style="color: teal"&gt;Math&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;pow&lt;/span&gt;&lt;span style="color: olive"&gt;((&lt;/span&gt;&lt;span style="color: maroon"&gt;1&lt;/span&gt;&lt;span style="color: #8b0000"&gt;/&lt;/span&gt;&lt;span style="color: red"&gt;frames)*cFrame, power)*delta;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; return Math.ceil(p);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;实际应用中，例如大众点评网的单张图片页面里右上角的图片浏览模块就使用了本文所述的技术。利用Javascript实现这样的动画效果其实方式很多，本文只是提供了其中一种可以参考的模式。最后让我们看一下jQuery中动画效果实现的基本模式，jQuery中所有动画的基础其实都源于jQuery.fx.prototype中的方法custom。其源代码片段如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;fx&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;prototype&lt;/span&gt;&lt;span style="color: olive"&gt;({&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;......&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;custom&lt;/span&gt;&lt;span style="color: gray"&gt;: &lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;from&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;to&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;unit&lt;/span&gt;&lt;span style="color: olive"&gt;){&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;startTime&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;now&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;start&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;end&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;to&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;unit&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;unit&lt;/span&gt;&lt;span style="color: gray"&gt; || &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;unit&lt;/span&gt;&lt;span style="color: gray"&gt; || &lt;/span&gt;&lt;span style="color: #8b0000"&gt;"&lt;/span&gt;&lt;span style="color: red"&gt;px&lt;/span&gt;&lt;span style="color: #8b0000"&gt;"&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;now&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;start&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;pos&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;state&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: maroon"&gt;0&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;update&lt;/span&gt;&lt;span style="color: olive"&gt;()&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;self&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;t&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;gotoEnd&lt;/span&gt;&lt;span style="color: olive"&gt;){&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;return&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;self&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;step&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;gotoEnd&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;t&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;elem&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: green"&gt;this&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;elem&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;push&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;t&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timerId&lt;/span&gt;&lt;span style="color: gray"&gt; == &lt;/span&gt;&lt;span style="color: green"&gt;null&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timerId&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;setInterval&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: olive"&gt;(){&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;for&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: green"&gt;var&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;i&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: maroon"&gt;0&lt;/span&gt;&lt;span style="color: gray"&gt;; &lt;/span&gt;&lt;span style="color: blue"&gt;i&lt;/span&gt;&lt;span style="color: gray"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;length&lt;/span&gt;&lt;span style="color: gray"&gt;; &lt;/span&gt;&lt;span style="color: blue"&gt;i&lt;/span&gt;&lt;span style="color: gray"&gt;++ &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; !&lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: olive"&gt;[&lt;/span&gt;&lt;span style="color: blue"&gt;i&lt;/span&gt;&lt;span style="color: olive"&gt;]()&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;splice&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;i&lt;/span&gt;&lt;span style="color: gray"&gt;--, &lt;/span&gt;&lt;span style="color: maroon"&gt;1&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;if&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; !&lt;/span&gt;&lt;span style="color: blue"&gt;timers&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;length&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;clearInterval&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timerId&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;timerId&lt;/span&gt;&lt;span style="color: gray"&gt; = &lt;/span&gt;&lt;span style="color: green"&gt;null&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: maroon"&gt;13&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;......&lt;br /&gt;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;从这段代码可以看到，其实jQuery中动画的基础模式和本文中所提到的其基本思路是一致的，不过jQuery中使用了一个timers的数组来管理诸多的动画时钟，并且所有接口封装的更加完善和通用，耦合性也更低，其它一些关键函数例如update, step都在jQuery.fx.prototype的扩展中。而easing的函数在jQuery.extend中，jQuery提供了两种渐变效果，分别为linear和swing，其计算的公式的代码片段如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&lt;span style="color: blue"&gt;jQuery&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;extend&lt;/span&gt;&lt;span style="color: olive"&gt;({&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;......&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;easing&lt;/span&gt;&lt;span style="color: gray"&gt;: &lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;linear&lt;/span&gt;&lt;span style="color: gray"&gt;: &lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;n&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;firstNum&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;diff&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;return&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;firstNum&lt;/span&gt;&lt;span style="color: gray"&gt; + &lt;/span&gt;&lt;span style="color: blue"&gt;diff&lt;/span&gt;&lt;span style="color: gray"&gt; * &lt;/span&gt;&lt;span style="color: blue"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: olive"&gt;}&lt;/span&gt;&lt;span style="color: gray"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue"&gt;swing&lt;/span&gt;&lt;span style="color: gray"&gt;: &lt;/span&gt;&lt;span style="color: green"&gt;function&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;n&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;firstNum&lt;/span&gt;&lt;span style="color: gray"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;diff&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;{&lt;/span&gt;&lt;span style="color: gray"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green"&gt;return&lt;/span&gt;&lt;span style="color: gray"&gt; &lt;/span&gt;&lt;span style="color: olive"&gt;((&lt;/span&gt;&lt;span style="color: gray"&gt;-&lt;/span&gt;&lt;span style="color: teal"&gt;Math&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;cos&lt;/span&gt;&lt;span style="color: olive"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;p&lt;/span&gt;&lt;span style="color: gray"&gt;*&lt;/span&gt;&lt;span style="color: teal"&gt;Math&lt;/span&gt;&lt;span style="color: gray"&gt;.&lt;/span&gt;&lt;span style="color: blue"&gt;PI&lt;/span&gt;&lt;span style="color: olive"&gt;)&lt;/span&gt;&lt;span style="color: #8b0000"&gt;/&lt;/span&gt;&lt;span style="color: red"&gt;2) + 0.5) * diff + firstNum;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;},&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;......&lt;br /&gt;});&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;有兴趣的朋友可以继续深入研究一下其源代码，本文中就不再赘述了。&lt;/p&gt;&lt;/div&gt;&lt;!-- You can start editing here. --&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1737373.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2010/05/17/1737373.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/archive/2010/03/29/1699397.html</id><title type="text">善用 cloneNode 存储 DOM 对象</title><summary type="text">获取DOM节点的方法有很多，如常用的getElementById()、getElementsByTagName()，前者返回一个节点元素，后者返回的是节点的集合。看似相同，实际上其中大有文章：1、getElementById()返回的节点可以保存到变量中，即便使用removeChild()方法移除，也能再通过保存的变量使用该节点。测试下面的代码：2、getElementsByTagName()返回...</summary><published>2010-03-29T03:44:00Z</published><updated>2010-03-29T03:44:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2010/03/29/1699397.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2010/03/29/1699397.html"/><content type="html">&lt;p&gt;获取DOM节点的方法有很多，如常用的getElementById()、getElementsByTagName()，前者返回一个节点元素，后者返回的是节点的集合。看似相同，实际上其中大有文章：&lt;br /&gt;&lt;strong&gt;1、getElementById()&lt;/strong&gt;&lt;br /&gt;返回的节点可以保存到变量中，即便使用removeChild()方法移除，也能再通过保存的变量使用该节点。&lt;br /&gt;测试下面的代码：&lt;br /&gt;&lt;pre  jquery1269834091984="3"&gt;&lt;code  jquery1269834091984="2"&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;div&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;id&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"test"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;hello&amp;nbsp;world&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;script&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;type&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"text/javascript"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span &gt;&lt;strong&gt;&lt;font color="#4169e1"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;()&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;{&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;oDiv&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;span &gt;&lt;font color="#008080"&gt;'test'&lt;/font&gt;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.body.removeChild(oDiv);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(oDiv.innerHTML);&lt;span &gt;&lt;font color="#008000"&gt;//hello&amp;nbsp;world&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;)()&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2、getElementsByTagName()&lt;/strong&gt;&lt;br /&gt;返回的值仅仅是对DOM节点地址的引用，如果使用removeChild()删除节点，返回值是会变化的。可能用图示更清晰吧&lt;br /&gt;&lt;img title="" alt="" src="http://www.silentash.com/upload/domnodes.jpg" /&gt;&lt;br /&gt;测试下面的代码加深印象：&lt;br /&gt;&lt;pre  jquery1269834091984="13"&gt;&lt;code  jquery1269834091984="12"&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;ul&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;id&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"test"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/li&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world2&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span &gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&amp;lt;script&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;type&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"text/javascript"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span &gt;&lt;strong&gt;&lt;font color="#4169e1"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;()&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;{&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;oDiv&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;span &gt;&lt;font color="#008080"&gt;'test'&lt;/font&gt;&lt;/span&gt;),oLi&amp;nbsp;=&amp;nbsp;document.getElementsByTagName(&lt;span &gt;&lt;font color="#008080"&gt;'LI'&lt;/font&gt;&lt;/span&gt;);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oDiv.removeChild(oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;]);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;].innerHTML);&lt;span &gt;&lt;font color="#008000"&gt;//期望的是hello&amp;nbsp;world,实际上输出的是hello&amp;nbsp;world2&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;)()&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;这种引用问题时有发生，解决的方法可用数组结合去存储返回值，类似于getElementById:&lt;br /&gt;&lt;pre  jquery1269834091984="15"&gt;&lt;code  jquery1269834091984="14"&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;ul&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;id&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"test"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/li&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world2&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span &gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&amp;lt;script&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;type&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"text/javascript"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span &gt;&lt;strong&gt;&lt;font color="#4169e1"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;()&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;{&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;oDiv&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;span &gt;&lt;font color="#008080"&gt;'test'&lt;/font&gt;&lt;/span&gt;),oLi&amp;nbsp;=&amp;nbsp;document.getElementsByTagName(&lt;span &gt;&lt;font color="#008080"&gt;'LI'&lt;/font&gt;&lt;/span&gt;),arr&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;];&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;];&lt;span &gt;&lt;font color="#008000"&gt;//数量多了可用循环遍历&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oDiv.removeChild(oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;]);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;].innerHTML);&lt;span &gt;&lt;font color="#008000"&gt;//hello&amp;nbsp;world&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;)()&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;不过问题又来了，如果我们用innerHTML=&amp;#8221;"代替removeChild，你会发现在&lt;strong&gt;IE浏览器下最后的输出会是空的&lt;/strong&gt;。&lt;br /&gt;&lt;pre  jquery1269834091984="17"&gt;&lt;code  jquery1269834091984="16"&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;ul&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;id&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"test"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/li&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world2&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span &gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&amp;lt;script&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;type&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"text/javascript"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span &gt;&lt;strong&gt;&lt;font color="#4169e1"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;()&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;{&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;oDiv&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;span &gt;&lt;font color="#008080"&gt;'test'&lt;/font&gt;&lt;/span&gt;),oLi&amp;nbsp;=&amp;nbsp;document.getElementsByTagName(&lt;span &gt;&lt;font color="#008080"&gt;'LI'&lt;/font&gt;&lt;/span&gt;),arr&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;];&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;];&lt;span &gt;&lt;font color="#008000"&gt;//数量多了可用循环遍历&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oDiv.innerHTML=&lt;span &gt;&lt;font color="#008080"&gt;''&lt;/font&gt;&lt;/span&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;].innerHTML);&lt;span &gt;&lt;font color="#008000"&gt;//IE下为空&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;)()&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;再次改进存储方法，使用强大的cloneNode()&lt;/strong&gt;&lt;br /&gt;&lt;pre  jquery1269834091984="19"&gt;&lt;code  jquery1269834091984="18"&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;lt;ul&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;id&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"test"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/li&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;li&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;hello&amp;nbsp;world2&lt;font color="#000080"&gt;&lt;span &gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span &gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&amp;lt;script&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span &gt;&lt;font color="#008000"&gt;type&lt;/font&gt;&lt;/span&gt;=&lt;span &gt;&lt;font color="#800000"&gt;"text/javascript"&lt;/font&gt;&lt;/span&gt;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span &gt;&lt;strong&gt;&lt;font color="#4169e1"&gt;function&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;()&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;{&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#000080"&gt;var&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;oDiv&amp;nbsp;=&amp;nbsp;document.getElementById(&lt;span &gt;&lt;font color="#008080"&gt;'test'&lt;/font&gt;&lt;/span&gt;),oLi&amp;nbsp;=&amp;nbsp;document.getElementsByTagName(&lt;span &gt;&lt;font color="#008080"&gt;'LI'&lt;/font&gt;&lt;/span&gt;),arr&amp;nbsp;=&amp;nbsp;[];&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;].cloneNode(true);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;]&amp;nbsp;=&amp;nbsp;oLi[&lt;span &gt;&lt;font color="#ff0000"&gt;1&lt;/font&gt;&lt;/span&gt;].cloneNode(true);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oDiv.innerHTML=&lt;span &gt;&lt;font color="#008080"&gt;''&lt;/font&gt;&lt;/span&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(arr[&lt;span &gt;&lt;font color="#ff0000"&gt;0&lt;/font&gt;&lt;/span&gt;].innerHTML);&lt;span &gt;&lt;font color="#008000"&gt;//hello&amp;nbsp;world&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span &gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;}&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;)()&amp;nbsp;&lt;br /&gt;&lt;span &gt;&lt;font color="#000080"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1699397.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2010/03/29/1699397.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/archive/2010/03/05/1678876.html</id><title type="text">Advanced Javascript: Objects, Arrays, and Array-Like objects</title><summary type="text">Javascript objects and arrays are both incredibly useful. They&amp;#8217;re also incredibly easy to confuse with each other. Mix in a few objects that look like arrays and you&amp;#8217;ve got a recipe for co...</summary><published>2010-03-05T02:12:00Z</published><updated>2010-03-05T02:12:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2010/03/05/1678876.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2010/03/05/1678876.html"/><content type="html">Javascript &lt;code&gt;objects&lt;/code&gt; and &lt;code&gt;arrays&lt;/code&gt; are both incredibly useful. They&amp;#8217;re also incredibly easy to confuse with each other. Mix in a few objects that look like arrays and you&amp;#8217;ve got a recipe for confusion! &#xD;
&lt;p&gt;We&amp;#8217;re going to see what the differences between objects and arrays are, how to work with some of the common array-like objects, and how to get the most performance out of each.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span id="more-106"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;What Objects Are&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;A javascript object is a basic data structure:&lt;/p&gt;&#xD;
&lt;div  id="highlighter_55"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;basicObj&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{};&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;an&amp;nbsp;empty&amp;nbsp;object&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;{}&amp;nbsp;is&amp;nbsp;a&amp;nbsp;shortcut&amp;nbsp;for&amp;nbsp;"new&amp;nbsp;Object()"&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;basicObj.suprise&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;cake!&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;basicObj[&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;suprise&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;];&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;"cake!"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Using &lt;code&gt;{}&lt;/code&gt; instead of &lt;code&gt;new Object();&lt;/code&gt; is know as &amp;#8220;Object Literal&amp;#8221; syntax.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;fancyObj&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;favoriteFood:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;pizza&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(a,&amp;nbsp;b){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;b;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;fancyObj.add(&lt;/span&gt;&lt;span style="color: #000000"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;5&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;fancyObj[&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;add&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;](&lt;/span&gt;&lt;span style="color: #000000"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;ditto.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;As you can see, and probably already knew, properties can be accessed a couple of different ways. However, it&amp;#8217;s an important point that we&amp;#8217;ll come back to in a minute.&lt;/p&gt;&#xD;
&lt;p&gt;Everything in javascript is an &lt;code&gt;object&lt;/code&gt;. Everything. &lt;code&gt;Arrays&lt;/code&gt;, &lt;code&gt;functions&lt;/code&gt;, even &lt;code&gt;numbers&lt;/code&gt;! Because of this, you can do some really interesting things, such as modifying the &lt;code&gt;prototypes&lt;/code&gt; of Objects, Arrays, etc.&lt;/p&gt;&#xD;
&lt;div  id="highlighter_907511"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;an&amp;nbsp;example&amp;nbsp;of&amp;nbsp;something&amp;nbsp;you&amp;nbsp;probably&amp;nbsp;shouldn't&amp;nbsp;do.&amp;nbsp;Ever.&amp;nbsp;Seriously.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;Number.prototype.addto&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(x){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;x;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;8&lt;/span&gt;&lt;span style="color: #000000"&gt;).addto(&lt;/span&gt;&lt;span style="color: #000000"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;17&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;other&amp;nbsp;variations:&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;8&lt;/span&gt;&lt;span style="color: #000000"&gt;.addto(&lt;/span&gt;&lt;span style="color: #000000"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;gives&amp;nbsp;a&amp;nbsp;syntax&amp;nbsp;error,&amp;nbsp;because&amp;nbsp;the&amp;nbsp;dot&amp;nbsp;is&amp;nbsp;assumed&amp;nbsp;to&amp;nbsp;be&amp;nbsp;a&amp;nbsp;decimal&amp;nbsp;point&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;8&lt;/span&gt;&lt;span style="color: #000000"&gt;[&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;addto&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;](&lt;/span&gt;&lt;span style="color: #000000"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;works&amp;nbsp;but&amp;nbsp;is&amp;nbsp;kind&amp;nbsp;of&amp;nbsp;ugly&amp;nbsp;compared&amp;nbsp;to&amp;nbsp;the&amp;nbsp;first&amp;nbsp;method&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;eight&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;8&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;eight.addto(&lt;/span&gt;&lt;span style="color: #000000"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;works&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;What Arrays Are&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Javascript arrays are a type of &lt;code&gt;object&lt;/code&gt; used for storing multiple values in a single variable. Each value gets numeric index and may be any data type.&lt;/p&gt;&#xD;
&lt;div  id="highlighter_637638"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[];&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;this&amp;nbsp;is&amp;nbsp;a&amp;nbsp;shortcut&amp;nbsp;for&amp;nbsp;new&amp;nbsp;Array();&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;cat&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;mouse&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;See how that syntax is so similar to the syntax used for setting object properties? In fact, the only difference is that objects use a string while arrays use a number. This is why arrays get confused with objects so often.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Length&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Arrays have a &lt;code&gt;length&lt;/code&gt; property that tells how many items are in the array and is automatically updated when you add or remove items to the array. &lt;/p&gt;&#xD;
&lt;div  id="highlighter_817678"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;cat&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;this&amp;nbsp;adds&amp;nbsp;to&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;mouse&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;this&amp;nbsp;adds&amp;nbsp;to&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;favoriteFood&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;pizza&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;this&amp;nbsp;DOES&amp;nbsp;NOT&amp;nbsp;add&amp;nbsp;to&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;setting&amp;nbsp;a&amp;nbsp;string&amp;nbsp;parameter&amp;nbsp;adds&amp;nbsp;to&amp;nbsp;the&amp;nbsp;underlying&amp;nbsp;object&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.length;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;2,&amp;nbsp;not&amp;nbsp;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;The length property is only modified when you add an item to the array, not the underlying object.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;The &lt;code&gt;length&lt;/code&gt; is always 1 higher than the highest index, even&amp;nbsp;if&amp;nbsp;there are actually fewer items in the array.&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div  id="highlighter_902006"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.length;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;0;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;this&amp;nbsp;is&amp;nbsp;the&amp;nbsp;only&amp;nbsp;item&amp;nbsp;in&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.length;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;101,&amp;nbsp;even&amp;nbsp;though&amp;nbsp;there&amp;nbsp;is&amp;nbsp;only&amp;nbsp;1&amp;nbsp;object&amp;nbsp;in&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;This is somewhat counter-intuitive. PHP does more what you would expect:&lt;/p&gt;&#xD;
&lt;div  id="highlighter_639378"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;php&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;array();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;php&amp;nbsp;behaves&amp;nbsp;differently&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;sizeof(arr);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;1&amp;nbsp;in&amp;nbsp;PHP&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;You can manually set the &lt;code&gt;length&lt;/code&gt; also. Setting it to 0 is a simple way to empty an array.&lt;/p&gt;&#xD;
&lt;p&gt;In addition to this length property, arrays have lots of nifty built in functions such as &lt;code&gt;push()&lt;/code&gt;, &lt;code&gt;pop()&lt;/code&gt;, &lt;code&gt;sort()&lt;/code&gt;, &lt;code&gt;slice()&lt;/code&gt;, &lt;code&gt;splice()&lt;/code&gt;, and more. This is what sets them apart from Array-Like Objects.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Array-like Objects&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Array-like objects look like arrays. They have various numbered elements and a length property. But that&amp;#8217;s where the similarity stops. Array-like objects do not have any of Array&amp;#8217;s functions, and for-in loops don&amp;#8217;t even work!&lt;/p&gt;&#xD;
&lt;p&gt;You&amp;#8217;ll come across these more often than you might expect. A common one is the &lt;code&gt;arguments&lt;/code&gt; variable that is present inside of every js function. &lt;/p&gt;&#xD;
&lt;p&gt;Also included in the category are the HTML node sets returned by &lt;code&gt;document.getElementsByTagName()&lt;/code&gt;, &lt;code&gt;document.forms&lt;/code&gt;, and basically every other DOM method and property that gives a list of items.&lt;/p&gt;&#xD;
&lt;div  id="highlighter_324116"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;document.forms.length;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;1;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;document.forms[&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;];&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;a&amp;nbsp;form&amp;nbsp;element.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;document.forms.join(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;throws&amp;nbsp;a&amp;nbsp;type&amp;nbsp;error.&amp;nbsp;this&amp;nbsp;is&amp;nbsp;not&amp;nbsp;an&amp;nbsp;array.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;document.forms;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;"object"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Did you know you can send any number of parameters you want to a javascript function? They&amp;#8217;re all stored in an array-like object named &lt;code&gt;arguments&lt;/code&gt;.&lt;/p&gt;&#xD;
&lt;div  id="highlighter_146383"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;takesTwoParams(a,&amp;nbsp;b){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;arguments&amp;nbsp;is&amp;nbsp;an&amp;amp;nbsp;&amp;nbsp;array-like&amp;nbsp;variable&amp;nbsp;inside&amp;nbsp;of&amp;nbsp;all&amp;nbsp;functions&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;arguments.length&amp;nbsp;works&amp;nbsp;great&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;you&amp;nbsp;gave&amp;nbsp;me&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;arguments.length&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;parameters&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arguments.length;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;parameter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arguments[i]);&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;takesTwoParams(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;one&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;two&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;three&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;alerts&amp;nbsp;"you&amp;nbsp;gave&amp;nbsp;me&amp;nbsp;3&amp;nbsp;parameter",&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;then&amp;nbsp;"parameter&amp;nbsp;0&amp;nbsp;=&amp;nbsp;one"&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;etc.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;This works great. But that&amp;#8217;s about as far as you can go with array-like objects. The flowing example does not work:&lt;/p&gt;&#xD;
&lt;div  id="highlighter_722918"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;takesTwoParams(a,&amp;nbsp;b){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;your&amp;nbsp;parameters&amp;nbsp;were&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arguments.join(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;throws&amp;nbsp;a&amp;nbsp;type&amp;nbsp;error&amp;nbsp;because&amp;nbsp;arguments.join&amp;nbsp;doesn't&amp;nbsp;exist&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;So what can you do? &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Well you could make your own &lt;code&gt;join()&lt;/code&gt; function, but that adds a lot of unnecessary overhead to your code because it has to loop over everything. If only there were a quick way to get an array out of an array like object&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;It turns out there is.&lt;/p&gt;&#xD;
&lt;p&gt;The array functions can be called on non-array objects as long as you know where to find the function (usually they&amp;#8217;re attached to the array, but this isn&amp;#8217;t an array remember &lt;img  alt=";)" src="http://nfriedly.com/techblog/wp-includes/images/smilies/icon_wink.gif" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;Prototype&lt;/code&gt; to the win:&lt;/p&gt;&#xD;
&lt;div  id="highlighter_919252"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;takesTwoParams(a,&amp;nbsp;b){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;args&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;Array.prototype.slice.call(arguments);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;your&amp;nbsp;parameters&amp;nbsp;were&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;args.join(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;yay,&amp;nbsp;this&amp;nbsp;works!&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Let&amp;#8217;s take a look at that a bit more in-depth:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;Array&lt;/code&gt;: This object is the original array that all other arrays inherit their properties from.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;Array.prototype&lt;/code&gt;:This gives us access to all the methods properties that each array inherits&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;Array.prototype.slice&lt;/code&gt;: The original slice method that is given to all arrays via the prototype chain. We can&amp;#8217;t call it directly though, because when it runs internally, it looks at the &lt;code&gt;this&lt;/code&gt; keyword, and calling it here would make &lt;code&gt;this&lt;/code&gt; point to &lt;code&gt;Array&lt;/code&gt;, not our &lt;code&gt;arguments&lt;/code&gt; variable.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;code&gt;Array.prototype.slice.call()&lt;/code&gt;: &lt;code&gt;call()&lt;/code&gt; and &lt;code&gt;apply()&lt;/code&gt; are prototype methods of the &lt;code&gt;Function&lt;/code&gt; object, meaning that they can be called on every function in javascript. These allow you to change what the &lt;code&gt;this&lt;/code&gt; variable points to inside a given function.&lt;/p&gt;&#xD;
&lt;p&gt;And finally, you get a regular &lt;code&gt;array&lt;/code&gt; back! This works because javascript returns a new object of type Array rather than whatever you gave it. This causes a lot of headaches for a &lt;a href="http://dean.edwards.name/weblog/2006/11/hooray/" target="_blank"&gt;few&lt;/a&gt; &lt;a href="http://webreflection.blogspot.com/2008/03/sorry-dean-but-i-subclassed-array-again.html" target="_blank"&gt;people&lt;/a&gt; who are trying to make subclasses of Array, but it&amp;#8217;s very handy in our case!&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;a name="gotchas"&gt;&lt;/a&gt;Gotchas&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;First, in Internet Explorer, DOM &lt;code&gt;NodeLists&lt;/code&gt; are not considered to be javascript objects, so you cannot call &lt;code&gt;Array.prototype.slice&lt;/code&gt; on them. If you want an array, you&amp;#8217;ll have to loop through it the old fashioned way. Or use a hybrid function that tries it the fast way first, then the slow way if that doesn&amp;#8217;t work. &lt;/p&gt;&#xD;
&lt;div  id="highlighter_301324"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;hybridToArray(nodes){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;works&amp;nbsp;in&amp;nbsp;every&amp;nbsp;browser&amp;nbsp;except&amp;nbsp;IE&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Array.prototype.slice.call(nodes);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;(err){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;slower,&amp;nbsp;but&amp;nbsp;works&amp;nbsp;in&amp;nbsp;IE&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[],&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;nodes.length;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;length;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arr.push(nodes[i]);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;See an example here: &lt;a href="http://nfriedly.com/demos/ie-nodelist-to-array" target="_blank"&gt;http://nfriedly.com/demos/ie-nodelist-to-array&lt;/a&gt;.&lt;/p&gt;&#xD;
&lt;p&gt;Second, arrays are objects, so you can do this, but it can get you some serious inconsistencies:&lt;/p&gt;&#xD;
&lt;div  id="highlighter_247103"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr[&lt;/span&gt;&lt;span style="color: #000000"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;first&amp;nbsp;element&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;adds&amp;nbsp;item&amp;nbsp;to&amp;nbsp;the&amp;nbsp;array&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.length;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;returns&amp;nbsp;1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.two&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;second&amp;nbsp;element&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;adds&amp;nbsp;an&amp;nbsp;item&amp;nbsp;to&amp;nbsp;the&amp;nbsp;underlying&amp;nbsp;object&amp;nbsp;that&amp;nbsp;array&amp;nbsp;is&amp;nbsp;built&amp;nbsp;on&amp;nbsp;top&amp;nbsp;of.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;arr.length;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;still&amp;nbsp;returns&amp;nbsp;1&amp;nbsp;!&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;BUT...&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;this&amp;nbsp;will&amp;nbsp;hit&amp;nbsp;both&amp;nbsp;0&amp;nbsp;and&amp;nbsp;"two"&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;A better solution: wrap arrays in an object if you need both worlds&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;This is basically a less efficient method of the array subclassing links I mentioned above. While less efficient, it has the advantage of being simple and reliable.&lt;/p&gt;&#xD;
&lt;p&gt;That said, I wouldn&amp;#8217;t recommend that you use this in most cases due to issues with speed and extra code requirements. It&amp;#8217;s provided here as an example.&lt;/p&gt;&#xD;
&lt;div  id="highlighter_414832"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;an&amp;nbsp;example&amp;nbsp;of&amp;nbsp;a&amp;nbsp;wrapper&amp;nbsp;for&amp;nbsp;an&amp;nbsp;array.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;not&amp;nbsp;recommended&amp;nbsp;for&amp;nbsp;most&amp;nbsp;situations.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ArrayContainer&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(arr){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;arr&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;||&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;[];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr.length;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;ArrayContainer.prototype.add&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(item){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr.length;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr[index]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;item;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr.length;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;index;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;ArrayContainer.prototype.get&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(index){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr[index];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;29&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;30&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;ArrayContainer.prototype.forEach&lt;/span&gt;&lt;span style="color: #000000"&gt;=&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(fn){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;31&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;32&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr.forEach)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr.forEach(fn);&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;use&amp;nbsp;native&amp;nbsp;code&amp;nbsp;if&amp;nbsp;it's&amp;nbsp;there&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;33&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;34&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;35&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;36&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;37&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;38&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fn(&amp;nbsp;i,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr[i],&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.arr&amp;nbsp;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;39&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;40&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;41&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;42&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;43&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;44&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mySuperDooperArray&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ArrayContainer();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;Now that your array is (somewhat) protected on the inside, you can loop through it&amp;#8217;s items with &lt;code&gt;forEach()&lt;/code&gt; and know that they will match it&amp;#8217;s length. You can also add arbitrary properties to &lt;code&gt;ArrayContainer&lt;/code&gt; or &lt;code&gt;mySuperDooperArray&lt;/code&gt; and they &lt;strong&gt;won&amp;#8217;t&lt;/strong&gt; get pulled into your &lt;code&gt;forEach()&lt;/code&gt; loop.&lt;/p&gt;&#xD;
&lt;p&gt;This example could be extended to completely protect the array if the need arose. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;An Even Better Solution: &lt;a href="http://nfriedly.com/webdev" target="_blank"&gt;Hire a javascript expert&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;nFriedly Web Development is a top ranked &lt;a href="http://nfriedly.com/webdev/javascript" target="_blank"&gt;Javascript and AJAX ninja&lt;/a&gt; with an extensive portfolio of proven results. I can bring your project to life and make it run faster than you ever imagined.&amp;nbsp; &lt;a href="http://nfriedly.com/contact" target="_blank"&gt;Get in touch&lt;/a&gt; with me or get a free &lt;a href="http://nfriedly.com/estimate" target="_blank"&gt;instant estimate&lt;/a&gt; for new projects.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1678876.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2010/03/05/1678876.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/archive/2010/02/24/1672762.html</id><title type="text">YUI 3 中的 Event Delegation</title><summary type="text">今天在 YUIBlog 上看到了一篇文章：Event Delegation With YUI 3， 发现 YUI 3 中内置的这个功能确实很好用。文中举了一个例子，假设有一个 Twitter 类的应用，显示固定条数的 tweets ，它每2分钟刷新一次，这个时候可能会出现新的 tweet ，而旧的 tweet 会被挤出去。假如我们想为每一个 tweet 中的头像添加点击事件的话，应该怎么办呢？如果...</summary><published>2010-02-24T08:05:00Z</published><updated>2010-02-24T08:05:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/archive/2010/02/24/1672762.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/archive/2010/02/24/1672762.html"/><content type="html">&lt;p&gt;今天在 YUIBlog 上看到了一篇文章：&lt;font color="#027ac6"&gt;Event Delegation With YUI 3&lt;/font&gt;， 发现 YUI 3 中内置的这个功能确实很好用。文中举了一个例子，假设有一个 Twitter 类的应用，显示固定条数的 tweets ，它每2分钟刷新一次，这个时候可能会出现新的 tweet ，而旧的 tweet 会被挤出去。假如我们想为每一个 tweet 中的头像添加点击事件的话，应该怎么办呢？&lt;/p&gt;&#xD;
&lt;p&gt;如果我们直接为每个 tweet 添加事件的话，你就要在每次更新的时候把旧的事件处理函数移除然后再为当前所有的 tweets 添加一次，不小心还会遭遇到 &lt;font color="#027ac6"&gt;IE 的内存泄露问题&lt;/font&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;还好我们可以从DOM事件冒泡机制中获益（&lt;font color="#027ac6"&gt;关于DOM 事件机制可以看这里&lt;/font&gt;），假设我们有下面一段代码：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;ul&amp;nbsp;id&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;container&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;li&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;a&amp;nbsp;href&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;span&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Item&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;6&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;span&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;a&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt;ul&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;根据事件冒泡机制，我们可以在列表中链接的父节点 ul 上来捕获所有链接的点击事件，并且可以在事件处理函数中定位到所点击的链接对象。YUI 3 中的 delegate() 函数就是来做这种事情的。在 YUI 中，假设我们要为上面示例代码中的每一个链接添加事件，可以这么写：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;Y.on(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;click&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;handleClick,&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;#container&amp;nbsp;li&amp;nbsp;a&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而 Y.delegate() 和 Y.on() 的语法很相似：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;Y.delegate(&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;click&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;handleClick,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;#container&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;nbsp;a&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;其中第三个参数是父节点的ID ，用来捕获事件。另外你也可以在一个 YUI Node 对象上实现 delegation ：&lt;/div&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;Y.one(&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;#container&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;).delegate(&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;click&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;handleClick,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;li&amp;nbsp;a&lt;/span&gt;&lt;span style="color: #000000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;这行代码和上面的效果一样&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面解释一下怎么通过事件获取相应的节点：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div  style="padding-bottom: 0px"&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #008080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;handleClick&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt;(e){&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;e.target&amp;nbsp;点击的对象，在示例中是&amp;nbsp;a&amp;nbsp;标签里的&amp;nbsp;span&amp;nbsp;节点对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;e.currentTarget&amp;nbsp;通过delegate&amp;nbsp;监听的对象，在示例中是&amp;nbsp;A&amp;nbsp;节点对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;e.container&amp;nbsp;用来捕捉事件的父节点对象，在示例中是&amp;nbsp;ul&amp;nbsp;节点对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;p&gt;综上可以看出，通过 delegate 来监听事件是一种很好的方式，它可以避免很多冗余代码并且简化操作，在某些场合尤其有用。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Lion5859/aggbug/1672762.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Lion5859/archive/2010/02/24/1672762.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Lion5859/articles/1602121.html</id><title type="text">如何做一个优秀的设计？</title><summary type="text">做一个优秀的设计，要做到以下三点： 找准问题提供多种解决方案发布后衡量效果，分析并总结 具体如何来做呢？第一是找准问题。设计是解决问题，&amp;#8220;Design= Problem Solving.&amp;#8221; 这是我认为对设计最好的定义。根据这个定义，我可以说，找准了问题，优秀设计的就成功了一半。那么怎么样找准问题呢？首先要搞清楚什么样的用户，遇到了什么样的问题。很多时候设计师认为自己很清楚用...</summary><published>2009-11-12T13:29:00Z</published><updated>2009-11-12T13:29:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/articles/1602121.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/articles/1602121.html"/></entry><entry><id>http://www.cnblogs.com/Lion5859/articles/1592844.html</id><title type="text">JavaScript 闭包</title><summary type="text">要成为高级 JavaScript 程序员，就必须理解闭包。 本文结合 ECMA 262 规范详解了闭包的内部工作机制，让 JavaScript 编程人员对闭包的理解从&amp;#8220;嵌套的函数&amp;#8221;深入到&amp;#8220;标识符解析、执行环境和作用域链&amp;#8221;等等 JavaScript 对象背后的运行机制当中，真正领会到闭包的实质。 原文链接：JavaScript Closures 可打印...</summary><published>2009-10-30T02:22:00Z</published><updated>2009-10-30T02:22:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/articles/1592844.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/articles/1592844.html"/></entry><entry><id>http://www.cnblogs.com/Lion5859/articles/1592836.html</id><title type="text">jQuery Ajax 全解析</title><summary type="text">jQuery确实是一个挺好的轻量级的JS框架，能帮助我们快速的开发JS应用，并在一定程度上改变了我们写JavaScript代码的习惯。废话少说，直接进入正题，我们先来看一些简单的方法，这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法，当然，如果要处理复杂的逻辑，还是需要用到jQuery.ajax()的(这个后面会说到).1. load( url, [data], [callba...</summary><published>2009-10-30T02:20:00Z</published><updated>2009-10-30T02:20:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/articles/1592836.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/articles/1592836.html"/></entry><entry><id>http://www.cnblogs.com/Lion5859/articles/1592608.html</id><title type="text">创建存储过程</title><summary type="text">Create PROCEDURE创建存储过程，存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。可以创建一个过程供永久使用，或在一个会话中临时使用（局部临时过程），或在所有会话中临时使用（全局临时过程）。也可以创建在 Microsoft&amp;#174; SQL Server&amp;#8482; 启动时自动运行的存储过程。语法Create PROC [ EDURE ] ...</summary><published>2009-10-29T15:08:00Z</published><updated>2009-10-29T15:08:00Z</updated><author><name>七哥</name><uri>http://www.cnblogs.com/Lion5859/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Lion5859/articles/1592608.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Lion5859/articles/1592608.html"/></entry></feed>
