﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Flyingis-随笔分类-Web 客户端技术</title><link>http://www.blogjava.net/flyingis/category/4274.html</link><description>Talking and thinking freely !&lt;br&gt;
Flying in the world of GIS !</description><language>zh-cn</language><lastBuildDate>Mon, 16 Jul 2007 07:24:24 GMT</lastBuildDate><pubDate>Mon, 16 Jul 2007 07:24:24 GMT</pubDate><ttl>60</ttl><item><title>[DWR文档] WEB-INF 参考</title><link>http://www.blogjava.net/flyingis/archive/2006/11/18/81898.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 18 Nov 2006 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/11/18/81898.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/81898.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/11/18/81898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/81898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/81898.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: DWR中文文档--WEB-INF 参考<br><br>翻译的方式采用中英文对照，翻译的文字不会完全和英文一一对照，主要是为了在不失原意的情况下保证中文的阅读理解习惯，当然，翻译的过程需要大家的支持，翻译不妥的地方尽请拍砖、指正。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/11/18/81898.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/81898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-11-18 09:34 <a href="http://www.blogjava.net/flyingis/archive/2006/11/18/81898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR 中文文档</title><link>http://www.blogjava.net/flyingis/archive/2006/11/18/81862.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 18 Nov 2006 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/11/18/81862.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/81862.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/11/18/81862.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/81862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/81862.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我是DWR初学者，虽然DWR入门简单，但还是想尝试翻译一下DWR的部分文档，翻译过程中自己会有更多的思考，翻译的方式采用中英文对照，翻译的文字不会完全和英文一一对照，主要是为了在不失原意的情况下保证中文的阅读理解习惯，当然，翻译的过程需要大家的支持，翻译不妥的地方尽请拍砖、指正。<br><br>Jet Mah已经开始翻译DWR文档，我将在他未翻译的文档中摘取比较重要的章节进行翻译，也算是对开源尽一点绵薄之力。我已翻译的部分在Java Tang中也会留言给出链接。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/11/18/81862.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/81862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-11-18 09:15 <a href="http://www.blogjava.net/flyingis/archive/2006/11/18/81862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 JavaScript 玩转 DOM Level 1</title><link>http://www.blogjava.net/flyingis/archive/2006/11/07/79705.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Tue, 07 Nov 2006 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/11/07/79705.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/79705.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/11/07/79705.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/79705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/79705.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: DOM(The Document Object Model)将HTML转换为XML文档格式来表达，为动态HTML编程提供了一种优雅的解决方案。DOM编程可以使用多种语言（Java中可以使用SAX进行XML编程），不论大家使用何种服务器端技术，JavaScript的DOM基础编程还是需要掌握的，最常见的莫过于getElementById()，引用Prototype.js使用最多的也是$("")，但是要做好Web客户端设计，我们需要了解更多更细。<br><br>当前各种主流浏览器对DOM Level 1标准支持的相对较好，我们就来看看在JavaScript中如何玩转DOM Level 1。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/11/07/79705.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/79705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-11-07 22:14 <a href="http://www.blogjava.net/flyingis/archive/2006/11/07/79705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译] 如何在 JavaScript 中实现拖放(下)</title><link>http://www.blogjava.net/flyingis/archive/2006/10/15/75277.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sun, 15 Oct 2006 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/10/15/75277.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/75277.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/10/15/75277.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/75277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/75277.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 终于完成了全文的翻译，由于时间比较参促，文章没有过多的校正与润色，阅读过程中难免会有些许生硬或不准确的感觉，请大家见量并指出，方便他人阅读。<br><br>原文作者将拖放功能的实现分步讲解，其核心的地方在于移动和放置元素时，鼠标、移动元素、目标元素关系的处理，只要这个问题处理好了，代码就很容易理解，译文仅供辅助参考之用，demo可以参考原文链接。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/10/15/75277.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/75277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-10-15 17:03 <a href="http://www.blogjava.net/flyingis/archive/2006/10/15/75277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译] 如何在 JavaScript 中实现拖放(中)</title><link>http://www.blogjava.net/flyingis/archive/2006/10/13/74998.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 13 Oct 2006 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/10/13/74998.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/74998.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/10/13/74998.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/74998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/74998.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上一篇文章介绍了移动页面元素所涉及到的捕获鼠标移动和鼠标点击的相关问题，本段文章将介绍如何移动和放置页面元素。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/10/13/74998.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/74998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-10-13 14:53 <a href="http://www.blogjava.net/flyingis/archive/2006/10/13/74998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译] 如何在 JavaScript 中实现拖放(上)</title><link>http://www.blogjava.net/flyingis/archive/2006/10/11/74591.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Wed, 11 Oct 2006 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/10/11/74591.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/74591.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/10/11/74591.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/74591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/74591.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JavaScript擅长于修改页面中的DOM元素，但是我们使用JavaScript通常只是实现一些简单功能，例如实现图片的翻转，网页中的标签页，等等。这篇文章将向你展示如何在页面中，对创建的元素实现拖放。<br>（译者注：原文发布已有一段时间，但感觉作者思路清晰明了，值得一读。文章一次看完比较好，但时间有限，我会尽快将剩下部分补上）&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/10/11/74591.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/74591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-10-11 16:20 <a href="http://www.blogjava.net/flyingis/archive/2006/10/11/74591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 随笔汇集</title><link>http://www.blogjava.net/flyingis/archive/2006/09/18/70313.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Mon, 18 Sep 2006 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/09/18/70313.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/70313.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/09/18/70313.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/70313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/70313.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 更新日期：2006-11-18&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/09/18/70313.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/70313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-09-18 15:31 <a href="http://www.blogjava.net/flyingis/archive/2006/09/18/70313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[翻译] "this" of JavaScript</title><link>http://www.blogjava.net/flyingis/archive/2006/09/15/69888.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 15 Sep 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/09/15/69888.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/69888.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/09/15/69888.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/69888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/69888.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: this是JavaScript中功能最强大的关键字之一。不幸的是，如果你不知道它具体怎么工作，你将很难正确使用它。原文的题目是《The this keyword》。<br>翻译不恰当的地方请大家指出。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/09/15/69888.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/69888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-09-15 15:02 <a href="http://www.blogjava.net/flyingis/archive/2006/09/15/69888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 对象的反射及应用</title><link>http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Tue, 12 Sep 2006 10:50:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/69213.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/69213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/69213.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java和.NET都有着比较完善的反射机制，用来处理未知的对象并获取它们的属性和方法。JavaScript虽然没有完善的反射体系，但在编程的时候还是可以通过代码设计来实现类似反射的基本功能。&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/69213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-09-12 18:50 <a href="http://www.blogjava.net/flyingis/archive/2006/09/12/69213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 JSON 创建对象</title><link>http://www.blogjava.net/flyingis/archive/2006/09/11/69014.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Mon, 11 Sep 2006 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/09/11/69014.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/69014.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/09/11/69014.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/69014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/69014.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    一般在JavaScript中可以调用Object类的构造函数来创建对象：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> obj </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();</span></div></font>
		<br />
		<font face="Verdana" size="2">    并且可以将对象附加到其他对象上，类似于C++中的对象数组，例如，某大学里拥有多个专业，每个专业都有一位主任和多名讲师组成，在JavaScript中可以这样来描述：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> university </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />university.specialty </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">该专业的主任是Sam</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].director.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Sam</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].director.age </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">该专业的两位讲师分别是Tom和Jerry</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].instructor </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> tom </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tom.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Tom</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tom.age </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">32</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].instructor[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> tom;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> jerry </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />jerry.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Jerry</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />jerry.age </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">35</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />university.specialty[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">].instructor[</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">] </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> jerry;</span></div><br />    可以看出，当对主任和讲师有更详细的描述时，这样一层层的代码给人感觉非常繁琐，许多代码都是重复编写，不但增加了代码量，并且还很枯燥。<br /><br />    <a href="http://www.json.org/" target="_blank"><font color="#000080">JSON</font></a>是一种轻量级的数据交换格式，它的优点就是便于读写，可以将JavaScript中的对象及其赋值写成键值对的形式，例如上面代码通过JSON来描述可以写成：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_17_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_195_Open_Text.style.display='none'; Codehighlighter1_17_195_Closed_Image.style.display='inline'; Codehighlighter1_17_195_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_17_195_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_17_195_Closed_Text.style.display='none'; Codehighlighter1_17_195_Open_Image.style.display='inline'; Codehighlighter1_17_195_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> university </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span id="Codehighlighter1_17_195_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_17_195_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  specialty : [<br /><img id="Codehighlighter1_37_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_189_Open_Text.style.display='none'; Codehighlighter1_37_189_Closed_Image.style.display='inline'; Codehighlighter1_37_189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_37_189_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_37_189_Closed_Text.style.display='none'; Codehighlighter1_37_189_Open_Image.style.display='inline'; Codehighlighter1_37_189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span id="Codehighlighter1_37_189_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_37_189_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    director : [<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      name : </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Sam</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      age : </span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    ],<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    instructor : [<br /><img id="Codehighlighter1_123_146_Open_Image" onclick="this.style.display='none'; Codehighlighter1_123_146_Open_Text.style.display='none'; Codehighlighter1_123_146_Closed_Image.style.display='inline'; Codehighlighter1_123_146_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_123_146_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_123_146_Closed_Text.style.display='none'; Codehighlighter1_123_146_Open_Image.style.display='inline'; Codehighlighter1_123_146_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span><span id="Codehighlighter1_123_146_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_123_146_Open_Text"><span style="color: rgb(0, 0, 0);">{name : </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Tom</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, age : </span><span style="color: rgb(0, 0, 0);">32</span><span style="color: rgb(0, 0, 0);">}</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_154_179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_154_179_Open_Text.style.display='none'; Codehighlighter1_154_179_Closed_Image.style.display='inline'; Codehighlighter1_154_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_154_179_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_154_179_Closed_Text.style.display='none'; Codehighlighter1_154_179_Open_Image.style.display='inline'; Codehighlighter1_154_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      </span><span id="Codehighlighter1_154_179_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_154_179_Open_Text"><span style="color: rgb(0, 0, 0);">{name : </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Jerry</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, age : </span><span style="color: rgb(0, 0, 0);">35</span><span style="color: rgb(0, 0, 0);">}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    ]<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  ]<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></font>
		<br />
		<font face="Verdana" size="2">    这样来描述整个对象的内部结构显得更为简洁、清晰，除了声明属性和对象外，还可以使用JSON创建的对象定义成员函数。当然，不论采用何种方法来描述，目的都是为了更高效直观的编写JavaScript代码，我们可以使用JSON定义一个对象，然后使用JavaScript添加属性，也可以使用JSON来扩展JavaScript所定义的对象，创建任意复杂的对象层次。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/69014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-09-11 19:33 <a href="http://www.blogjava.net/flyingis/archive/2006/09/11/69014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 BOM</title><link>http://www.blogjava.net/flyingis/archive/2006/09/01/67169.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 01 Sep 2006 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/09/01/67169.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/67169.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/09/01/67169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/67169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/67169.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    BOM全称是Browser Object Model，在不依赖于网页内容的情况下提供和浏览器视窗交互的对象，下图显示了BOM的组成结构。<br /><br /><p align="center"><img height="411" alt="BOM-Structure.gif" src="http://www.blogjava.net/images/blogjava_net/flyingis/BOM-Structure.gif" width="639" border="0" /></p><br />    可以看出，window是BOM的核心对象，在使用window中所有对象时，可以省去window，例如window.document可以写成document，window.frames[0]可以写成frame[0]。为了对视窗进行操作，BOM提供了四种方法：moveBy(dx,dy)、moveTo(x,y)、resizeBy(dw,dh)、resizeTo(w,h)，这四种方法比较简单，具体使用可以参考相关资料。<br /><br />    BOM中没有特别复杂的概念，但需要注意的是，现在BOM还没有一个统一的标准，各种浏览器对BOM的支持程度也不一，相同的功能也许其对象描述并不相同，即使是BOM结构本身也存在问题，如location既存在于window下的第二级结构中，也存在于window.document下的第三级结构中，但它们的功能描述是相同的。在目前情况下，只有针对用户所使用的浏览器来定制代码，或为不同的浏览器分别进行代码描述。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/67169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-09-01 17:22 <a href="http://www.blogjava.net/flyingis/archive/2006/09/01/67169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVG 中使用 JavaScript</title><link>http://www.blogjava.net/flyingis/archive/2006/08/31/66936.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Thu, 31 Aug 2006 12:06:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/08/31/66936.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/66936.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/08/31/66936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/66936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/66936.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者:<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    SVG(Scalable Vector Graphics)是一种基于XML的语言，用来在Web中绘制矢量图形。当前，除了Mozilla 2.0外，没有一款浏览器在本质上支持SVG，都需要插件来显示SVG图形，著名的有Adobe公司和Corel公司的SVG插件。<br /><br />    一个简单的SVG<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">svg </span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/2000/svg"</span><span style="COLOR: #ff0000"> xmlns:xlink</span><span style="COLOR: #0000ff">=http://www.w3.org/1999/xlink </span><span style="COLOR: #ff0000">width</span><span style="COLOR: #0000ff">="100%"</span><span style="COLOR: #ff0000"> height</span><span style="COLOR: #0000ff">="100%"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">desc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />显示一个正方形和一个圆形<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">desc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">defs</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">rect </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="myrect"</span><span style="COLOR: #ff0000"> width</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> height</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> fill</span><span style="COLOR: #0000ff">="red"</span><span style="COLOR: #ff0000"> x</span><span style="COLOR: #0000ff">="15"</span><span style="COLOR: #ff0000"> y</span><span style="COLOR: #0000ff">="15"</span><span style="COLOR: #ff0000"> stroke</span><span style="COLOR: #0000ff">="black"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">circle </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mycircle"</span><span style="COLOR: #ff0000"> r</span><span style="COLOR: #0000ff">="75"</span><span style="COLOR: #ff0000"> fill</span><span style="COLOR: #0000ff">="white"</span><span style="COLOR: #ff0000"> stroke</span><span style="COLOR: #0000ff">="black"</span><span style="COLOR: #ff0000"> cx</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> cy</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">defs</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">use </span><span style="COLOR: #ff0000">xlink:href</span><span style="COLOR: #0000ff">="#myrect"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">use </span><span style="COLOR: #ff0000">xlink:href</span><span style="COLOR: #0000ff">="#mycircle"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">svg</span><span style="COLOR: #0000ff">&gt;</span></div><br />    为了更好的理解SVG中的标签，可以和HTML标签作个简单的比较，SVG中的&lt;svg/&gt;和HTML中的&lt;html/&gt;类似，&lt;desc/&gt;和&lt;title/&gt;类似，&lt;g/&gt;和&lt;div/&gt;类似。<br /><br />    在SVG中可以使用JavaScript，当需要遵循一些规则：必须使用type属性；language属性是非法的；使用特殊XML字符时可以使用CDATA（SVG和CDATA都遵循XML规范）；xlink:href替换src。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">svg </span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.w3.org/2000/svg"</span><span style="COLOR: #ff0000"> xmlns:xlink</span><span style="COLOR: #0000ff">=http://www.w3.org/1999/xlink </span><span style="COLOR: #ff0000">width</span><span style="COLOR: #0000ff">="100%"</span><span style="COLOR: #ff0000"> height</span><span style="COLOR: #0000ff">="100%"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">desc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />显示一个正方形和一个圆形<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">desc</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;![CDATA[</span><span style="COLOR: #808080"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  function comp(a, b) {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    if (a &gt; b)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      alert("a is bigger than b");<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    else<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      alert("a is not bigger than b");<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">]]&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">defs</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">rect </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="myrect"</span><span style="COLOR: #ff0000"> width</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> height</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> fill</span><span style="COLOR: #0000ff">="red"</span><span style="COLOR: #ff0000"> x</span><span style="COLOR: #0000ff">="15"</span><span style="COLOR: #ff0000"> y</span><span style="COLOR: #0000ff">="15"</span><span style="COLOR: #ff0000"> stroke</span><span style="COLOR: #0000ff">="black"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">circle </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mycircle"</span><span style="COLOR: #ff0000"> r</span><span style="COLOR: #0000ff">="75"</span><span style="COLOR: #ff0000"> fill</span><span style="COLOR: #0000ff">="white"</span><span style="COLOR: #ff0000"> stroke</span><span style="COLOR: #0000ff">="black"</span><span style="COLOR: #ff0000"> cx</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #ff0000"> cy</span><span style="COLOR: #0000ff">="150"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">defs</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">use </span><span style="COLOR: #ff0000">xlink:href</span><span style="COLOR: #0000ff">="#myrect"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">use </span><span style="COLOR: #ff0000">xlink:href</span><span style="COLOR: #0000ff">="#mycircle"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">svg</span><span style="COLOR: #0000ff">&gt;</span></div><br />    在SVG中使用JavaScript可以写在如下几个位置：&lt;desc/&gt;标签之后；在&lt;defs/&gt;中；在&lt;g/&gt;标签之前。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/66936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-08-31 20:06 <a href="http://www.blogjava.net/flyingis/archive/2006/08/31/66936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浏览器中的 JavaScript</title><link>http://www.blogjava.net/flyingis/archive/2006/08/31/66935.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Thu, 31 Aug 2006 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/08/31/66935.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/66935.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/08/31/66935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/66935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/66935.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    之前写过不少JavaScript基础的随笔，基本上都是针对其语法、语言结构来论述的。但是，现在使用JavaScript最多的地方是在浏览器中，这里就简单谈谈浏览器中使用JavaScript。<br /><br />    在浏览器中使用JavaScript分为内联和外联两种方法，和CSS比较相似。<br /><br />    内联<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">内联</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_62_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_114_Open_Text.style.display='none'; Codehighlighter1_62_114_Closed_Image.style.display='inline'; Codehighlighter1_62_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_62_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_114_Closed_Text.style.display='none'; Codehighlighter1_62_114_Open_Image.style.display='inline'; Codehighlighter1_62_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_62_114_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_62_114_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img id="Codehighlighter1_84_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_84_113_Open_Text.style.display='none'; Codehighlighter1_84_113_Closed_Image.style.display='inline'; Codehighlighter1_84_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_84_113_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_84_113_Closed_Text.style.display='none'; Codehighlighter1_84_113_Open_Image.style.display='inline'; Codehighlighter1_84_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> message() </span><span id="Codehighlighter1_84_113_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_84_113_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">Good Day !</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div><br />    外联<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">外联</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">language</span><span style="COLOR: #0000ff">="JavaScript"</span><span style="COLOR: #ff0000"> src</span><span style="COLOR: #0000ff">="../path/external.js"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div></font>
		<font face="Verdana" size="2">
				<br />    在external.js中，可以包含任何js代码，例如类的定义、方法函数等。相比之下，使用外联方法引用js文件可以做到更安全、代码更容易管理、节省资源开销。之所以能节省资源开销，是因为当两个页面同时使用一个js文件时，该js文件只会被下载一次，避免的相同代码重复下载增加页面的代码量。<br /><br />    网页中的JavaScript源代码一般放置在&lt;head&gt;&lt;/head&gt;区域，当写在&lt;body&gt;&lt;/body&gt;中时，一旦页面加载就会执行body中的JavaScript代码，无法人工控制代码的执行。如果需要页面加载时同时执行JavaScript方法，则需要在head中定义该方法，否则系统会报错。<br /><br />    JavaScript最初只有一种浏览器的支持，因此，需要一种方法将JavaScript代码隐藏在老的浏览器中，避免对JavaScript解析产生错误，这就是我们过去经常可以看到的，在代码前后加上&lt;!--&gt;&lt;//--&gt;，在现在看来，这种方法已经没有必要了，一是因为使用外联方式引用JavaScript代码更加合适，二是当前主流浏览器对JavaScript的支持已经越来越多，当然也就能正确识别JavaScript代码。<br /><br />    在浏览网页时，当某张图片无法显示时，可以通过文字来替换它，当网页不支持某段JavaScript代码时，我们也能通过一种替代的方式来提醒用户自己的浏览器不支持JavaScript或禁止了JavaScript，即使用&lt;noscript&gt;&lt;/noscript&gt;，放置在body区域中。<br /><br />    随着XHTML(eXtensible HTML)标准的出现，&lt;script&gt;标签也出现了一些变化，过去我看到有的页面在&lt;script&gt;标签中使用languange属性，有的使用type属性，当时没怎么注意，其实后者正是XHTML出现后所定义的，可以为JavaScript设置mime类型为"text/javascript"。<br /><br />    XHTML带来的另外一个变化就是使用CDATA，使用CDATA可以在表达式中使用一些特殊字符，增强代码的可读性，避免使用"&amp;lt"、"&amp;gt"来分别表示小于和大于。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_31_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_171_Open_Text.style.display='none'; Codehighlighter1_31_171_Closed_Image.style.display='inline'; Codehighlighter1_31_171_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_31_171_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_171_Closed_Text.style.display='none'; Codehighlighter1_31_171_Open_Image.style.display='inline'; Codehighlighter1_31_171_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_31_171_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_31_171_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;!</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">[CDATA[<br /><img id="Codehighlighter1_64_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_166_Open_Text.style.display='none'; Codehighlighter1_64_166_Closed_Image.style.display='inline'; Codehighlighter1_64_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_64_166_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_64_166_Closed_Text.style.display='none'; Codehighlighter1_64_166_Open_Image.style.display='inline'; Codehighlighter1_64_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> comp(a, b) </span><span id="Codehighlighter1_64_166_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_64_166_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (a </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> b)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a is bigger than b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a is not bigger than b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />]]</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div><br />    代码中大于和引号均使用了我们常见的书写形式，避免了使用XML实体所带来的阅读上的困难。当然，这也存在旧的浏览器无法识别CDATA的问题，需要我们加入注释来隐藏CDATA标签。大家可以想到，最好的办法还是使用外联的方法使用JavaScript。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_31_175_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_175_Open_Text.style.display='none'; Codehighlighter1_31_175_Closed_Image.style.display='inline'; Codehighlighter1_31_175_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_31_175_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_175_Closed_Text.style.display='none'; Codehighlighter1_31_175_Open_Image.style.display='inline'; Codehighlighter1_31_175_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">script </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span id="Codehighlighter1_31_175_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_31_175_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">&lt;![CDATA[</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /><img id="Codehighlighter1_66_168_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_168_Open_Text.style.display='none'; Codehighlighter1_66_168_Closed_Image.style.display='inline'; Codehighlighter1_66_168_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_66_168_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_168_Closed_Text.style.display='none'; Codehighlighter1_66_168_Open_Image.style.display='inline'; Codehighlighter1_66_168_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">  </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> comp(a, b) </span><span id="Codehighlighter1_66_168_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_66_168_Open_Text"><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (a </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> b)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a is bigger than b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      alert(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">a is not bigger than b</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">//</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5">]]&gt;</span><span style="COLOR: #008000; BACKGROUND-COLOR: #f5f5f5"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div><br />    虽然部分浏览器还不完全支持XHTML，但我们应该尽量按照XHTML标准来书写代码，使得该标准能够获得更大更广泛的支持。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/66935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-08-31 20:01 <a href="http://www.blogjava.net/flyingis/archive/2006/08/31/66935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式--简单模式</title><link>http://www.blogjava.net/flyingis/archive/2006/08/11/63027.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 11 Aug 2006 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/08/11/63027.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/63027.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/08/11/63027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/63027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/63027.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    正则表达式除了用来匹配一些特殊字符外，还有许多其他的作用。Metacharacters，character classes和quantifiers都是正则表达式语法中的重要组成部分，可以用来实现更强大的功能。 <br /><br />    <strong>Metacharacters</strong><br /><br />    正则表达式的Metacharacters主要包括：<br /><br />    ([{\^$|)?*+.<br /><br />    当需要使用这些符号的时候，需要在前面加上一个反斜杠"\"，例如：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">?/</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RegExp(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><br />    一个字符的表示可以使用它的文字符号，也可以使用ASCII码或Unicode码来代码它。例如，当一个字符使用ASCII码表示的时候，我们需要在一个两位十六进制的编码前加上"\x"。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">apple</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> regName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\x61</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(regName.test(name));  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出"true"</span></div><br />    当然，使用十进制来表示字母a。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\</span><span style="COLOR: #000000">141</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">;</span></div><br />    使用Unicode来表示一个字符，需要四位十六进制的编码，例如\u0062代表b。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">big</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\u0062</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(reg.test(s));  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出为"true"</span></div><br />    下面一段代码可以到达同样的效果：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">big</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RegExp(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\\u0062</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(reg.test(s));  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出为"true"</span></div><br />    另外，有一些预定义好的特殊字符，用来表示特殊的含义。如：“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将用户输入的新一行的所有字符都删除</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> strWithNewLines.replace(</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">g, </span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);</span></div><br />    <strong>Character classes</strong><br />  <br />    Character classer代表着需要匹配的一组字符，将需要匹配的字符放在一对中括号里，正则表达式将能有效的识别第一个字符，第二个字符，等等。<br /><br />    <u>Simple classes</u><br /><br />    如果需要同时匹配"pig"和"big"，可以使用simple character class来实现：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pig, big</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">[pb]ig</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">gi;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> str.match(reg);</span></div><br />    此时，arr中的数据包括"pig"和"big"。当然，使用ASCII或Unicode来表示p或b同样可行。<br /><br />    <u>Negation classes</u><br /><br />    有时我们需要匹配除了少数几个字符外的所有字符，在这种情况下，我们可以使用negation class来进行匹配。例如，匹配除了a和b之外所有的字符，可以表示为[^ab]。在上一个例子中，将reg表示为/[^p]ig/gi，则结果中将过滤掉pig。<br /><br />    <u>Range classes</u><br /><br />    顾名思义，range class就是用来指定某个范围的匹配字符，例如从a到z可以表示为[a-z]，从1到10可以表示为[1-10]。如果将range class指定的字符排除在外，可以使用[^1-10]，表示除了1到10范围外的所有字符。<br /><br />    <u>Combination classes</u><br /><br />    举一个例子就清楚了，现在需要匹配从1到10，从a到g，并且加上新一行的所有字符，可以表示为[1-10a-g\n]。<font style="BACKGROUND-COLOR: #ffffff" color="#0000ff">注意，在[]里不允许再嵌套[]</font>。<br />  <br />    <u>Predefined classes</u><br /><br />    因为有许多样式都不停在重复使用，因此一组预定义好的character classes可以用来简化一些比较复杂的类型。具体的可以参考相关资料，下面举个简单的例子：<br />  <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">8743 apple</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(reg.test(str));  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出为"true"</span></div>  <br />    使用predefined class可以写成：<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">8743 apple</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> reg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">\d\d\d</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(reg.test(str));  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出为"true"</span></div><br />    <strong>Quantifiers</strong><br />  <br />    Quantifiers能够指定某种匹配方式需要进行多少次，包括指定确定的次数，或不确定的次数如至少多少次。<br /><br />    <u>Simple quantifiers</u><br /><br />    下面列表中，指定了某种模式需要重复进行的次数，部分符号和闭包的意义一样：<br /><br /><p align="left"><img height="152" alt="simple quantifiers.gif" src="http://www.blogjava.net/images/blogjava_net/flyingis/simple%20quantifiers.gif" width="500" border="0" /></p>    例如var reg = /b?read/就可以表示bread或read。<br />  <br />    <u>三种正则表达式的quantifiers</u><br /><br />    Greedy quantifier: 对一个目标串进行匹配搜索，当在目标串中没有相匹配的字符串时，就删去目标串的最后一个字符，再次进行匹配，如果没有发现则再删去最后一个字符，依此类推，最后的结果要么已经将字符匹配上，要么目标串已经为空。<br /><br />    Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索，当没有匹配时，给目标串加上一个字符，再次进行搜索，依此类推，直到在目标串上匹配成功，或整个目标串都被搜索但仍然没有完成匹配。<br /><br />    Possessive quantifier: 直接对整个目标串进行匹配，要么匹配上，要么匹配失败，它只进行一次匹配。<br /><br />    那么如何判断这三种不同的quantifiers呢？主要就是根据问号(?)星号(*)和加号(+)的组合来判断的，如下表所示。<br /><br /><img height="155" alt="three quantifiers.gif" src="http://www.blogjava.net/images/blogjava_net/flyingis/three%20quantifiers.gif" width="500" border="0" /><br /><br />    <font color="#0000ff">需要注意的是</font>，possessive quantifier在目前主流的浏览器中都不被支持，IE和Opera在碰到possessive quantifier时将会抛出异常，Mozilla虽然不会发生错误，但会将它作为greedy quantifier来对待。</font>
		<br />
		<br />
		<font face="Verdana">    <font size="2">相关链接：<a href="/flyingis/archive/2006/08/10/62858.html" target="_blank"><font color="#000080">正则表达式--JavaScript 实现基础</font></a></font></font>
<img src ="http://www.blogjava.net/flyingis/aggbug/63027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-08-11 16:09 <a href="http://www.blogjava.net/flyingis/archive/2006/08/11/63027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式--JavaScript 实现基础</title><link>http://www.blogjava.net/flyingis/archive/2006/08/10/62858.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Thu, 10 Aug 2006 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/08/10/62858.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/62858.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/08/10/62858.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/62858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/62858.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    正则表达式用来从某一段字符串中匹配所需要的字符，这些字符可以非常简单，也可以非常复杂。JavaScript生来就对正则表达式有着良好的支持，在网络的字符搜索匹配中发挥着重要的作用。<br /><br />    JavaScript通过RegExp类来支持正则表达式，举一个最简单的例子：<br />  <br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> RegExp(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);</span></div><br />    它可以匹配一个字符串中出现的第一个"apple"字符串，并且对大小写敏感。在构造方法中加入第二个参数"g"则代表的搜索出字符串中所有的"apple"，这里"g"代表"global"。如果第二个参数为"i"，则代表着case-insensitive，匹配过程中将不考虑字母的大小写。将上述两者综合起来，可以搜索出所有"apple"字符串，并且不考虑大小写问题。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> RegExp(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">gi</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">); </span></div><br />    正则表达式有着并不唯一的表示方法，使用Perl语言中的语法，可以将上述表达式表示为：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">gi;</span></div><br />    创建了一个RegExp对象后，RegExp的方法可以构造出不同的匹配方式，因为正则表达式是对字符串进行的操作，所以String的一些方法在构造正则表达式的过程中也扮演着重要角色。<br /><br />    <strong>RegExp对象的方法</strong> <br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Greenapple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(regApple.test(sampleString));</span></div><br />    上面代码输出的结果是"true"，因为sampleString中包含了需要匹配的字符串"apple"，这是最简单的检测方式。有时，我们需要知道匹配的详细结果，例如：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">green apples, red apples</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">g;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> arr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> regApple.exec(sampleString);</span></div><br />    通过使用exec()方法，返回的arr是关于匹配结果的一个数组，包括每一个匹配的值及其所在的段，例如上例中是"green apples"还是"red apples"。match()方法有着和exec()相同的功能，只是表达方式不同：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">green apples, red apples</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">g;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> arr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> sampleString.match(regApple);</span></div><br />    search()方法和indexOf()比较类似，返回第一个匹配的字符串所在的位置：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">green apples, red apples</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">gi;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(sampleString.search(regApple));  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"6"</span></div><br />    <strong>String的方法<br /></strong><br />    String的replace()方法可以将指定的字符串替换为另一个字符串：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">There is a green apple.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(sampleString.replace(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">green</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">red</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"There is a red apple."</span></div><br />    将replace()的第一个参数替换为一个正则表达式，可以达到同样的效果：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> sampleString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">There is a green apple.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> regApple </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">green</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(sampleString.replace(regApple, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">red</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"There is a red apple."</span></div><br />    replace()的第二个参数可以替换为一个function()，该function()接受一个匹配字符串作为参数，返回一个替换字符串。(存在疑问)<br /><br />    使用正则表达式可以实现String的split()方法相同的功能。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> fruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple,pear,lemon</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> arr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> fruit.split(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);</span></div><br />    使用正则表达式：<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> fruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple,pear,lemon</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> reg </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">\,</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> arr </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> fruit.split(reg);</span></div><br />    以上这些都是JavaScript正则表达式最基本的一些特性，实现了一些最基本的功能，这些都不是正则表达式真正的强大之处，在作者接下来的随笔中会继续介绍。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/62858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-08-10 21:04 <a href="http://www.blogjava.net/flyingis/archive/2006/08/10/62858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMLHttpRequest 在 IE7 中将区分大小写</title><link>http://www.blogjava.net/flyingis/archive/2006/07/25/59958.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Tue, 25 Jul 2006 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/07/25/59958.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/59958.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/07/25/59958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/59958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/59958.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">
						<font face="Verdana">    一直以来本地XMLHttpRequest对象是不区分大小写的，但从IE7开始，XMLHttpRequest/ActiveX对象将对大小写敏感，这将和传统的面向对象语言例如Java、C#等保持一致，<a href="/flyingis/archive/2006/06/13/52484.html" target="_blank"><font color="#000080">ECMAScript中也是如此</font></a>。<br /><br />    过去在IE7版本之前使用的方法和函数不需要关心这个问题，但如果要将程序迁移到IE7中或保持所有浏览器版本的兼容性，需要对过去的程序进行修改来保证程序的正确运行。<br /><br />    其实这种变化应该是发展的趋势，严格控制对象名称可以规范代码风格统一化并减少阅读代码所带来的困难，这是即使在对大小写没有任何要求的时候也应该注意的问题，能形成规约是件好事。<br /><br />    IE7已经放出<a href="http://www.microsoft.com/windows/ie/downloads/default.mspx" target="_blank"><font color="#000080">beta3版本</font></a>，需要在Windows XP SP2操作系统下安装。</font>
				</font>
		</p>
<img src ="http://www.blogjava.net/flyingis/aggbug/59958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-07-25 11:39 <a href="http://www.blogjava.net/flyingis/archive/2006/07/25/59958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 中的继承(下)</title><link>http://www.blogjava.net/flyingis/archive/2006/07/15/58339.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 15 Jul 2006 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/07/15/58339.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/58339.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/07/15/58339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/58339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/58339.html</trackback:ping><description><![CDATA[
		<font size="2">
				<font face="Verdana">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /></font>
		</font>
		<font size="2">
				<br />
				<font face="Verdana">    <strong>Prototype</strong><br /><br />    在《<a href="/flyingis/archive/2006/07/03/56324.html" target="_blank"><font color="#000080">JavaScript中的对象(下)</font></a>》一文中，我们了解到任何prototype的属性和方法都会被传递到该类的所有实例中，利用这一特性，使用prototype也能实现继承。 <br />  </font>
		</font>
		<div>
				<font face="Verdana">
						<font size="2">
								<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
										<img id="Codehighlighter1_18_20_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_20_Open_Text.style.display='none'; Codehighlighter1_18_20_Closed_Image.style.display='inline'; Codehighlighter1_18_20_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="Codehighlighter1_18_20_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_18_20_Closed_Text.style.display='none'; Codehighlighter1_18_20_Open_Image.style.display='inline'; Codehighlighter1_18_20_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
										<span style="color: rgb(0, 0, 255);">function</span>
										<span style="color: rgb(0, 0, 0);"> ClassA() </span>
										<span id="Codehighlighter1_18_20_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
										</span>
										<span id="Codehighlighter1_18_20_Open_Text">
												<span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
										</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> ClassA.prototype.id </span>
										<span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">1998</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_87_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_107_Open_Text.style.display='none'; Codehighlighter1_87_107_Closed_Image.style.display='inline'; Codehighlighter1_87_107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_87_107_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_87_107_Closed_Text.style.display='none'; Codehighlighter1_87_107_Open_Image.style.display='inline'; Codehighlighter1_87_107_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> ClassA.prototype.sayId </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()</span><span id="Codehighlighter1_87_107_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_87_107_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.id);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_129_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_129_131_Open_Text.style.display='none'; Codehighlighter1_129_131_Closed_Image.style.display='inline'; Codehighlighter1_129_131_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_129_131_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_129_131_Closed_Text.style.display='none'; Codehighlighter1_129_131_Open_Image.style.display='inline'; Codehighlighter1_129_131_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">ClassB()</span><span id="Codehighlighter1_129_131_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_129_131_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> ClassB.prototype</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">ClassA();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> ClassB.prototype.name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_231_253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_231_253_Open_Text.style.display='none'; Codehighlighter1_231_253_Closed_Image.style.display='inline'; Codehighlighter1_231_253_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_231_253_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_231_253_Closed_Text.style.display='none'; Codehighlighter1_231_253_Open_Image.style.display='inline'; Codehighlighter1_231_253_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> ClassB.prototype.sayName</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()</span><span id="Codehighlighter1_231_253_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_231_253_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
						</font>
				</font>
		</div>
		<font size="2">
				<br />
				<font face="Verdana">    需要注意的是，这种实现继承的方法不能将参数传入到ClassA的构造器中，是一个缺陷。ClassB的所有属性和方法必需在将ClassB的prototype对象指向ClassA的实例之后进行附值。这样做是因为，prototype指向一个新的对象，在此之前prototype的属性和方法都被覆盖销毁。<br /><br />    对代码进行测试：<br /></font>
		</font>
		<div>
				<font size="2">
						<br />
						<font face="Verdana">
								<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
										<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
										<span style="color: rgb(0, 0, 255);">var</span>
										<span style="color: rgb(0, 0, 0);"> obj1 </span>
										<span style="color: rgb(0, 0, 0);">=</span>
										<span style="color: rgb(0, 0, 0);">
										</span>
										<span style="color: rgb(0, 0, 255);">new</span>
										<span style="color: rgb(0, 0, 0);">ClassA();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
										<span style="color: rgb(0, 0, 255);">var</span>
										<span style="color: rgb(0, 0, 0);"> obj2</span>
										<span style="color: rgb(0, 0, 0);">=</span>
										<span style="color: rgb(0, 0, 0);">
												<font color="#0000ff">new</font> ClassB();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj1.id </span>
										<span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">1998</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj2.id</span><span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">2000</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj2.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">悉尼奥运会</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj1.sayId();  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"1998"</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">obj2.sayId();  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"1998"</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">obj2.sayName();  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"悉尼奥运会"</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(obj2</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">ClassA);  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"true"</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">alert(obj2 </span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">ClassB);  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"true"</span></div>
						</font>
				</font>
		</div>
		<font size="2">
				<br />
				<font face="Verdana">    在上述代码中可以看出，使用prototype实现继承，instanceof操作符出现了另外的用途，在用构造起定义类实现继承时，instanceof不会出现这种效果。但是使用prototype不能支持多重继承。<br />  <br />    在《<a href="/flyingis/archive/2006/07/03/56324.html" target="_blank"><font color="#000080">JavaScript中的对象(下)</font></a>》和上文的论述中可以了解到，使用构造器定义类实现继承和使用prototype实现继承均存在各自的缺陷，要避免出现这些情况，只有将两者混合使用。<br /><br />    <strong>混合方法</strong><br /><br />    《<a href="/flyingis/archive/2006/07/03/56324.html" target="_blank"><font color="#000080">JavaScript中的对象(下)</font></a>》一文中曾经论述，创建一个类的最佳方法，是使用构造器的方法去定义属性，使用prototype定义方法。在继承中同样如此。<br /><br /></font>
		</font>
		<div>
				<font size="2">
						<font face="Verdana">
								<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
										<img id="Codehighlighter1_20_38_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_38_Open_Text.style.display='none'; Codehighlighter1_20_38_Closed_Image.style.display='inline'; Codehighlighter1_20_38_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="Codehighlighter1_20_38_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_20_38_Closed_Text.style.display='none'; Codehighlighter1_20_38_Open_Image.style.display='inline'; Codehighlighter1_20_38_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
										<span style="color: rgb(0, 0, 255);">function</span>
										<span style="color: rgb(0, 0, 0);">ClassA(id)</span>
										<span id="Codehighlighter1_20_38_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_20_38_Open_Text">
												<span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
												<span style="color: rgb(0, 0, 255);">this</span>
												<span style="color: rgb(0, 0, 0);">.id </span>
												<span style="color: rgb(0, 0, 0);">=</span>
												<span style="color: rgb(0, 0, 0);"> id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
										</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
												<br />
												<img id="Codehighlighter1_77_97_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_97_Open_Text.style.display='none'; Codehighlighter1_77_97_Closed_Image.style.display='inline'; Codehighlighter1_77_97_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
												<img id="Codehighlighter1_77_97_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_77_97_Closed_Text.style.display='none'; Codehighlighter1_77_97_Open_Image.style.display='inline'; Codehighlighter1_77_97_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
												ClassA.prototype.sayId</span>
										<span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_77_97_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_77_97_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.id);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_127_174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_127_174_Open_Text.style.display='none'; Codehighlighter1_127_174_Closed_Image.style.display='inline'; Codehighlighter1_127_174_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_127_174_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_127_174_Closed_Text.style.display='none'; Codehighlighter1_127_174_Open_Image.style.display='inline'; Codehighlighter1_127_174_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> ClassB(id, name) </span><span id="Codehighlighter1_127_174_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_127_174_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   <b><strong>ClassA.call(</strong></b></span><b><span style="color: rgb(0, 0, 255);"><strong>this</strong></span></b><span style="color: rgb(0, 0, 0);"><b><strong>, id)</strong></b>;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><strong>ClassB.prototype </strong></span><strong><span style="color: rgb(0, 0, 0);">=</span> 
												<span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">new</span></strong><span style="color: rgb(0, 0, 0);"><strong> ClassA()</strong>;<br /><img id="Codehighlighter1_248_270_Open_Image" onclick="this.style.display='none'; Codehighlighter1_248_270_Open_Text.style.display='none'; Codehighlighter1_248_270_Closed_Image.style.display='inline'; Codehighlighter1_248_270_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_248_270_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_248_270_Closed_Text.style.display='none'; Codehighlighter1_248_270_Open_Image.style.display='inline'; Codehighlighter1_248_270_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> ClassB.prototype.sayName</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()</span><span id="Codehighlighter1_248_270_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_248_270_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
						</font>
				</font>
		</div>
<img src ="http://www.blogjava.net/flyingis/aggbug/58339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-07-15 16:53 <a href="http://www.blogjava.net/flyingis/archive/2006/07/15/58339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 中的继承(上)</title><link>http://www.blogjava.net/flyingis/archive/2006/07/15/58290.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 15 Jul 2006 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/07/15/58290.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/58290.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/07/15/58290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/58290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/58290.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    继承是面向对象语言基本特征之一，通过继承可以将父类所具有的特性遗传到子类。ECMAScript中的继承不像Java、C++等语言那么明显，直接通过关键字来实现，通常它是通过模拟方式来实现继承功能的，并且实现方式有多种。<br /><br />    在继承中引入this关键字，使用构造器方法定义类来实现继承。一个构造器是一个函数，因此可以将父类的构造器作为子类的一个方法使用并进行调用。<br /></font>
		<font face="Verdana" size="2">
				<br />
				<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
						<img id="Codehighlighter1_20_93_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_93_Open_Text.style.display='none'; Codehighlighter1_20_93_Closed_Image.style.display='inline'; Codehighlighter1_20_93_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_20_93_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_20_93_Closed_Text.style.display='none'; Codehighlighter1_20_93_Open_Image.style.display='inline'; Codehighlighter1_20_93_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
						<span style="color: rgb(0, 0, 255);">function</span>
						<span style="color: rgb(0, 0, 0);">ClassA(id)</span>
						<span id="Codehighlighter1_20_93_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_20_93_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">.id</span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);">id;<br /><img id="Codehighlighter1_64_90_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_90_Open_Text.style.display='none'; Codehighlighter1_64_90_Closed_Image.style.display='inline'; Codehighlighter1_64_90_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_64_90_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_64_90_Closed_Text.style.display='none'; Codehighlighter1_64_90_Open_Image.style.display='inline'; Codehighlighter1_64_90_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">.sayId </span>
								<span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_64_90_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_64_90_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.id);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span>
						<span style="color: rgb(0, 0, 0);">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
								<br />
								<img id="Codehighlighter1_122_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_122_276_Open_Text.style.display='none'; Codehighlighter1_122_276_Closed_Image.style.display='inline'; Codehighlighter1_122_276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_122_276_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_122_276_Closed_Text.style.display='none'; Codehighlighter1_122_276_Open_Image.style.display='inline'; Codehighlighter1_122_276_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
						</span>
						<span style="color: rgb(0, 0, 255);">function</span>
						<span style="color: rgb(0, 0, 0);">ClassB(id, name) </span>
						<span id="Codehighlighter1_122_276_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_122_276_Open_Text">
								<span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">.newMethod</span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> ClassA;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
								<span style="color: rgb(0, 0, 255);">this</span>
								<span style="color: rgb(0, 0, 0);">.newMethod(id);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
								<span style="color: rgb(0, 0, 255);">delete</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">this</span>.<span style="color: rgb(0, 0, 0);">newMethod;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> name;<br /><img id="Codehighlighter1_247_273_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_273_Open_Text.style.display='none'; Codehighlighter1_247_273_Closed_Image.style.display='inline'; Codehighlighter1_247_273_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_247_273_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_247_273_Closed_Text.style.display='none'; Codehighlighter1_247_273_Open_Image.style.display='inline'; Codehighlighter1_247_273_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sayName</span><span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">()</span><span id="Codehighlighter1_247_273_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_247_273_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span>
				</div>
		</font>
		<font face="Verdana" size="2">
				<br />    注意，子类中所有新的属性和方法都必需在删除newMethod后引入，否则，可能存在用父类的属性和方法重写子类属性和方法的危险。另外，使用这种方法还可以实现多重继承，此时如果两个父类具有相同的属性或方法时，最后的类具有优先级。由于这种继承方法比较流行，ECMAScript第三版引入了两个Function对象：call()和apply()。<br /><br />    <strong>call()</strong><br /><br />    call()方法是最接近上述继承方式的方法，它的第一个参数是this指向的对象，所有的其他参数都直接传到function。<br /></font>
		<div>
				<font face="Verdana" size="2">
						<br />
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<img id="Codehighlighter1_34_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_71_Open_Text.style.display='none'; Codehighlighter1_34_71_Closed_Image.style.display='inline'; Codehighlighter1_34_71_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_34_71_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_34_71_Closed_Text.style.display='none'; Codehighlighter1_34_71_Open_Image.style.display='inline'; Codehighlighter1_34_71_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
								<span style="color: rgb(0, 0, 255);">function</span>
								<span style="color: rgb(0, 0, 0);">sayMessage(first, last)</span> <span id="Codehighlighter1_34_71_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"></span><span id="Codehighlighter1_34_71_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   alert(first </span><span style="color: rgb(0, 0, 0);">+</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.logic </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">last);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">obj </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> obj.logic </span><span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">or</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img style="width: 11px; height: 16px;" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> sayMessage.call(obj,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Coffee </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Tea</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"Coffee or Tea"</span></div>
				</font>
		</div>
		<font face="Verdana" size="2">
				<br />    用call()方法来实现继承，只需要this.newMethod相关的三行代码。<br /></font>
		<div>
				<font face="Verdana" size="2">
						<br />
						<font face="Verdana" size="2">
								<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
										<img id="Codehighlighter1_26_230_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_230_Open_Text.style.display='none'; Codehighlighter1_26_230_Closed_Image.style.display='inline'; Codehighlighter1_26_230_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
										<img id="Codehighlighter1_26_230_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_26_230_Closed_Text.style.display='none'; Codehighlighter1_26_230_Open_Image.style.display='inline'; Codehighlighter1_26_230_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
										<span style="color: rgb(0, 0, 255);">function</span>
										<span style="color: rgb(0, 0, 0);"> ClassB(id, name)</span>
										<span id="Codehighlighter1_26_230_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_26_230_Open_Text">
												<span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span> 
												<span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this.newMethod = ClassA;</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this.newMethod(id);</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">delete this.newMethod;</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  ClassA.call(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">, id);  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this指向ClassB的对象</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">name;<br /><img id="Codehighlighter1_201_227_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_227_Open_Text.style.display='none'; Codehighlighter1_201_227_Closed_Image.style.display='inline'; Codehighlighter1_201_227_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_201_227_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_201_227_Closed_Text.style.display='none'; Codehighlighter1_201_227_Open_Image.style.display='inline'; Codehighlighter1_201_227_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sayName </span><span style="color: rgb(0, 0, 0);">=</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_201_227_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"></span><span id="Codehighlighter1_201_227_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span>
								</div>
						</font>
				</font>
				<font face="Verdana" size="2">
						<br />    <strong>apply()</strong><br /><br />    apply()方法需要两个参数：this所指向的对象，和传到function的由参数组成的array。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_34_71_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_71_Open_Text.style.display='none'; Codehighlighter1_34_71_Closed_Image.style.display='inline'; Codehighlighter1_34_71_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_34_71_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_34_71_Closed_Text.style.display='none'; Codehighlighter1_34_71_Open_Image.style.display='inline'; Codehighlighter1_34_71_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> sayMessage(first, last)  </span><span id="Codehighlighter1_34_71_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_34_71_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  alert(first </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.logic </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">last);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> obj </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />obj.logic </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">or</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />sayMessage.apply(obj, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Coffee </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> Tea</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出"Coffee or Tea"</span></div></font>
				<font face="Verdana" size="2">  <br />    同样，使用 apply() 实现继承可以通过如下方法实现。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_26_242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_242_Open_Text.style.display='none'; Codehighlighter1_26_242_Closed_Image.style.display='inline'; Codehighlighter1_26_242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_26_242_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_26_242_Closed_Text.style.display='none'; Codehighlighter1_26_242_Open_Image.style.display='inline'; Codehighlighter1_26_242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> ClassB(id, name) </span><span id="Codehighlighter1_26_242_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_26_242_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this.newMethod = ClassA;</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this.newMethod(id);</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">delete this.newMethod;</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">  ClassA.apply(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array(id));  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">this指向ClassB的对象</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> name;<br /><img id="Codehighlighter1_213_239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_239_Open_Text.style.display='none'; Codehighlighter1_213_239_Closed_Image.style.display='inline'; Codehighlighter1_213_239_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_213_239_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_213_239_Closed_Text.style.display='none'; Codehighlighter1_213_239_Open_Image.style.display='inline'; Codehighlighter1_213_239_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.sayName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_213_239_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_213_239_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></font>
				<font size="2">
						<font face="Verdana">
								<br />    当父类构造器的参数和子类构造器参数的顺序一致时，可以使用子类的arguments对象作为第二个参数。否则，必需创建一个array来传递参数，或是使用call()方法。<br /><br />    <a href="/flyingis/archive/2006/07/15/58339.html" target="_blank"><font color="#000080">文章待续……</font></a></font>
				</font>
		</div>
<img src ="http://www.blogjava.net/flyingis/aggbug/58290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-07-15 10:38 <a href="http://www.blogjava.net/flyingis/archive/2006/07/15/58290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 中的对象(下)</title><link>http://www.blogjava.net/flyingis/archive/2006/07/03/56324.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Mon, 03 Jul 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/07/03/56324.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/56324.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/07/03/56324.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/56324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/56324.html</trackback:ping><description><![CDATA[
		<font size="2">
				<font face="Verdana">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /></font>
		</font>
		<font size="2">
				<br />
				<font face="Verdana">
						<font size="3">
								<strong>5  自定义类和对象</strong>
						</font>
						<br />
						<br />5.1  工厂方法<br /><br />    在ECMAScript中创建工厂方法，返回一个特定类型的对象，以此实现代码的简洁适用。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_23_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_188_Open_Text.style.display='none'; Codehighlighter1_23_188_Closed_Image.style.display='inline'; Codehighlighter1_23_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_23_188_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_23_188_Closed_Text.style.display='none'; Codehighlighter1_23_188_Open_Image.style.display='inline'; Codehighlighter1_23_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> createFruit() </span><span id="Codehighlighter1_23_188_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_23_188_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> tempFruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  tempFruit.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  tempFruit.number </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_141_167_Open_Image" onclick="this.style.display='none'; Codehighlighter1_141_167_Open_Text.style.display='none'; Codehighlighter1_141_167_Closed_Image.style.display='inline'; Codehighlighter1_141_167_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_141_167_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_141_167_Closed_Text.style.display='none'; Codehighlighter1_141_167_Open_Image.style.display='inline'; Codehighlighter1_141_167_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  tempFruit.showName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_141_167_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_141_167_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> tempFruit;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> creatFruit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> creatFruit();</span></div><br />    在createFruit()中可以加入形参来传入参数的值。随着ECMAScript不断被规范化，这种创建对象的方法已不再流行，一部分原因是语法上的，一部分原因是功能上的，如每个对象的实例都拥有属于自己的showName方法，给内存管理带来一定的开销。<br /><br />5.2  构造函数<br /><br />    选择一个类名，第一个字母大写，该类名即是构造函数的名称。创建一个构造函数和工厂方法比较类似，不同的是需要使用关键字new来创建对象的引用。使用构造函数的方式来创建对象和使用工厂方法有着相同的弊端。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_29_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_133_Open_Text.style.display='none'; Codehighlighter1_29_133_Closed_Image.style.display='inline'; Codehighlighter1_29_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_29_133_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_29_133_Closed_Text.style.display='none'; Codehighlighter1_29_133_Open_Image.style.display='inline'; Codehighlighter1_29_133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> Fruit(name, number) </span><span id="Codehighlighter1_29_133_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_29_133_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.number </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> number;<br /><img id="Codehighlighter1_104_130_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_130_Open_Text.style.display='none'; Codehighlighter1_104_130_Closed_Image.style.display='inline'; Codehighlighter1_104_130_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_104_130_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_104_130_Closed_Text.style.display='none'; Codehighlighter1_104_130_Open_Image.style.display='inline'; Codehighlighter1_104_130_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.showName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_104_130_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_104_130_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">pear</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">);</span></div><br />5.3  使用 Prototype<br /><br />    使用prototype属性可以用来创建新的对象，首先需要一个空的构造函数建立类的名称，然后所有的属性和方法都直接分配到prototype属性中。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_17_19_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_19_Open_Text.style.display='none'; Codehighlighter1_17_19_Closed_Image.style.display='inline'; Codehighlighter1_17_19_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_17_19_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_17_19_Closed_Text.style.display='none'; Codehighlighter1_17_19_Open_Image.style.display='inline'; Codehighlighter1_17_19_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> Fruit() </span><span id="Codehighlighter1_17_19_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_17_19_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Fruit.prototype.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Fruit.prototype.number </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">;<br /><img id="Codehighlighter1_119_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_119_141_Open_Text.style.display='none'; Codehighlighter1_119_141_Closed_Image.style.display='inline'; Codehighlighter1_119_141_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_119_141_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_119_141_Closed_Text.style.display='none'; Codehighlighter1_119_141_Open_Image.style.display='inline'; Codehighlighter1_119_141_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />Fruit.prototype.showName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_119_141_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_119_141_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> fruit1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> fruit2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit();</span></div><br />    但是，这样同样存在一些缺点。首先，构造函数中没有参数，给初始化带来一些麻烦，其次，当一个属性指向的是一个对象而非方法时，该对象会被所有的实例所共享，任何一点改动都会影响到其他对象引用的使用。<br /><br />5.4  混合使用工厂方法和Prototype<br /><br />这个概念很简单：使用构造函数定义所有除方法外的属性，使用 prototype 定义对象的方法。这样每个方法只会被创建一次，每个对象都能拥有自己对象实例的属性。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_29_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_119_Open_Text.style.display='none'; Codehighlighter1_29_119_Closed_Image.style.display='inline'; Codehighlighter1_29_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_29_119_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_29_119_Closed_Text.style.display='none'; Codehighlighter1_29_119_Open_Image.style.display='inline'; Codehighlighter1_29_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> Fruit(name, number) </span><span id="Codehighlighter1_29_119_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_29_119_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.number </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> number;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.owner </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Array(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Jerry</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Terry</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img id="Codehighlighter1_159_181_Open_Image" onclick="this.style.display='none'; Codehighlighter1_159_181_Open_Text.style.display='none'; Codehighlighter1_159_181_Closed_Image.style.display='inline'; Codehighlighter1_159_181_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_159_181_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_159_181_Closed_Text.style.display='none'; Codehighlighter1_159_181_Open_Image.style.display='inline'; Codehighlighter1_159_181_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />Fruit.prototype.showName </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_159_181_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_159_181_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> Fruit2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Fruit(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">pear</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">);</span></div><br />5.5  动态 prototype<br /><br />    简单来说，这种方法就是使用了一个标识符来判断 prototype 是否已经被指向某个方法，从而保证这些方法只会被创建并指向一次。<br /><br />5.6  混合工厂方法<br /><br />    这种方法和经典的工厂方法及构造函数方法在对象方法内存管理上存在同样的问题，一般不建议使用该方法，除了某些特殊情况（XML in JavaScript中有这样的例子）。<br /><br /><font size="3"><strong>6  修改对象<br /></strong></font><br />    使用prototype对象可以对对象进行修改。除了用户自定义的对象外，ECMAScript原始对象也有prototype属性。直接使用 prototype可以给对象创建新的方法。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_42_72_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_72_Open_Text.style.display='none'; Codehighlighter1_42_72_Closed_Image.style.display='inline'; Codehighlighter1_42_72_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_72_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_42_72_Closed_Text.style.display='none'; Codehighlighter1_42_72_Open_Image.style.display='inline'; Codehighlighter1_42_72_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 0);">Number.prototype.toHexString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">() </span><span id="Codehighlighter1_42_72_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_42_72_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.toString(</span><span style="color: rgb(0, 0, 0);">16</span><span style="color: rgb(0, 0, 0);">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> iNum </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />alert(iNum.toHexString());  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出A</span></div><br />    另外，使用prototype可以轻松修改已有的方法，让方法名指向新的方法。需要注意的是，指向新的方法后，原有的方法不再被任何对象使用，将会被垃圾回收器销毁，使得原有方法不再存在。比较安全的解决办法是，建立一个新的引用来保存原有的方法，然后再将原方法覆盖。<br /><br />    比较特殊的是，ECMAScript中创建对象，在对象引用被创建后，可以给对象加入新的方法，并且可以立即在对象的引用中使用。这是ECMAScript的一个特性，但不推荐这样使用，以免带来不必要的麻烦，例如阅读理解、文档资料等。</font>
		</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/56324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-07-03 14:02 <a href="http://www.blogjava.net/flyingis/archive/2006/07/03/56324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 中的对象(上)</title><link>http://www.blogjava.net/flyingis/archive/2006/06/30/55964.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 30 Jun 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/06/30/55964.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/55964.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/06/30/55964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/55964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/55964.html</trackback:ping><description><![CDATA[
		<font size="2">
				<font face="Verdana">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br /><br />    面向对象语言需要具备三种基本特征：继承（Inheritance）、多态 (Polymorphism) 、封装（Encapsulation and Aggregation）。和Java 、C++ 等语言一样，ECMAScript 被认为是面向对象的，因为它同时支持这些特征。<br /> <br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> obj </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object();</span></div><br />    该语句创建了一个对象，当构造函数没有参数时，可以省略后面的括号。我们通常是通过对象的引用来进行对象操作，当一个对象的引用为null时，ECMAScript将启动垃圾回收程序删除该对象，释放内存。当一个对象存在多个引用时，需要将所有的引用设置为null来释放该对象所占用的空间。<br /><br /><b><font size="3">1  </font></b><b><font size="3">早期绑定和动态绑定<br /></font></b><b></b><br />    早期绑定是指在对象被实例化之前对象的属性和方法已经被定义，使得编译器或解释器能够提前编译机器码。Java和VB支持这种特性，但ECMAScript 并非强类型，不支持早期绑定。<br /><br />    动态绑定是指编译器或解释器在运行时才知道该对象的具体类型，之前并不会检查，只会判断这些属性和方法是否得到该对象的支持。ECMAScript对所有的变量使用动态绑定。<br /><br /><font size="3"><b>2  </b><b>对象类型</b></font><br /><br />2.1  原始对象<br /><br />    ECMA-262 定义不受主机环境影响的ECMAScript支持的任意对象为原始对象，简而言之，原始对象就是ECMA-262定义的引用类型，比较常用的有Object、Function、String、Boolean、Number、Array、Date。 <br /><b><br />    Array<br /><br />    </b>Array有许多常用的方法，很多和Java类似，在此不作介绍。需要注意的是，使用push()和pop()两个方法，可以将Array看作一个栈，遵循后进先出规则（LIFO）。使用shift()和push()两个方法，Array对象即可看作是一个队列，遵循后进后出的规则（LILO）。splice()方法非常有用，它轻松的实现了链表的一些基本功能，如删除数据项、插入数据、替换数据。 <br /><b><br />    Date<br /><br />    </b>ECMAScript中的Date类是基于Java早期版本中的java.util.Date类的，它可以精确表示1970年1月1日（格林威治时间）前后285616年的任意时间。Date是少有的几个重写了toString()和valueOf()方法，并且两个方法并不相同的类。valueOf()通常表示精确到毫秒级的时间，toString()通常返回个性化的时间表示方法，例如相同的时间在不同浏览器下显示的效果可能不一样。 <br /><br />2.2  Build-in对象<br /><br />    Build-in 对象除了具备原始对象的基本特性外，它在 ECMAScript 程序开始运行时就可以使用，因此可以说任何 Build-in 对象就是原始对象。目前 ECMA-262 只定义了两个 Build-in 对象： Global 和 Math 。 <br /><b><br />    Global<br /><br />    </b>在ECMAScript里，没有函数可以单独存在，所有的函数都必须是某个对象的方法。如isNan()、isFinite()、parseInt()、parseFloat()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() 等均是Global对象的方法，除此之外，Global对象还包括一些属性。 <br /><b><br />    Math<br /><br />    </b>Math中有许多属性和方法可以用于数学计算，和Java中的比较类似。 <br /><br />2.3  Host 对象<br /><br />    除了原始对象和Build-in对象外，其他对象均是Host对象。所有的BOM和DOM对象均被认为是Host对象。 <br /><b><br /><font size="3">3  </font></b><b><font size="3">类成员的访问方式<br /><br />    </font></b>在面向对象语言程序设计中，常见的类成员访问方式有public、protected和private。在ECMAScript中，只有public一种访问方式，对象中所有的属性和方法都是可见的，因此，在程序设计时需要额外注意系统安全性的问题。在没有合理的程序规范之前，程序员在编写ECMAScript代码时，通常使用一定规范的命名方式来说明该属性或方法是私有的（仅仅是说明而已，实际上还是公有的），例如在名称前后加上下划线，或只在名称前加下划线。另外，在ECMAScript中没有static方法。 <br /><b><br /><font size="3">4  this</font></b><b><font size="3">关键字</font></b><br /><br />    this关键字是ECMAScript中一个非常重要的概念，通常在对象的方法中使用。<br /><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><img id="Codehighlighter1_21_44_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_44_Open_Text.style.display='none'; Codehighlighter1_21_44_Closed_Image.style.display='inline'; Codehighlighter1_21_44_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_44_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_21_44_Closed_Text.style.display='none'; Codehighlighter1_21_44_Open_Image.style.display='inline'; Codehighlighter1_21_44_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);"> whatFruit() </span><span id="Codehighlighter1_21_44_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_21_44_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  alert(</span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.color);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> table1 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />table1.fruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">apple</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />table1.whatFruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> whatFruit;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);"> table2 </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Object;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />table2.fruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">pear</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />table2.whatFruit </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> whatFruit;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />table1.whatFruit();  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出apple</span><span style="color: rgb(0, 128, 0);"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">table2.whatFruit();  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">输出pear</span></div><br />    当一个变量前面没有对象或this来引用时，ECMAScript认为该变量是一个本地的或全局变量，于是在本地和全局中去搜寻该变量，如果最后仍没有找到，将会在alert中输出null。<br /><br />    <a href="/flyingis/archive/2006/07/03/56324.html" target="_blank"><font color="#000080">文章待续……</font></a></font>
		</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/55964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-06-30 15:20 <a href="http://www.blogjava.net/flyingis/archive/2006/06/30/55964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 调试工具</title><link>http://www.blogjava.net/flyingis/archive/2006/06/16/53389.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Fri, 16 Jun 2006 12:16:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/06/16/53389.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/53389.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/06/16/53389.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/53389.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/53389.html</trackback:ping><description><![CDATA[
		<font face="Verdana" size="2">    作者：<a href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a><br />  <br />    JavaScript代码看起来总是要比Java、C#乱的多，可能是自己还不熟悉JavaScript编程，因此一款优秀的JavaScript调试器就显得格外重要。目前在网络和书上见到最多的有：<br /><br />    Microsoft Script Debugger: 集成在IE中的一款很原始的调试工具，具备基本的调试功能，除了可以用于调试客户端脚本，还能调试在Microsoft IIS上运行的服务器端脚本。该工具命令窗口是基于文本的，针对VBScript和IE环境进行调试会更加适用。 <br />  <br />    Firefox JavaScript Console: 可以记录JavaScript中出现的所有警告和错误，诊断出大多数错误。工具比较简单实用。 <br />  <br />    Venkman: 一个基于Mozilla的浏览器的JavaScript调试环境，是Mozilla浏览器的一个扩展。Venkman基于Mozilla JavaScript调试API（js/jsd），js/jsd API 构成了 Netscape JavaScript Debugger 1.1的基础，Netscape浏览器4.x系统都提供了这个调试工具。Venkman是目前比较流行的JavaScript调试工具。<br /><br />    相关下载：<br /><br />    <a href="http://www.hacksrus.com/~ginda/venkman/"><font color="#000080">http://www.hacksrus.com/~ginda/venkman/</font></a><br />    上面最新的版本是0.9.85，对于Firefox只能支持1.5以前的版本。<br /><br />    <a href="https://dwr.dev.java.net/files/documents/2427/22010/venkman-0.9.85.jw2.xpi"><font color="#000080">https://dwr.dev.java.net/files/documents/2427/22010/venkman-0.9.85.jw2.xpi</font></a><br />    venkman-0.9.85.jw2.xpi是venkman-0.9.85xpi的修改版本，可以支持Firefox 1.5.0。 <br /><br />    <a href="https://addons.mozilla.org/firefox/216/"><font color="#000080">https://addons.mozilla.org/firefox/216/</font></a><br />    在Mozilla官方站点上，venkman有了另外的一个名称——JavaScript Debugger，已经发布了0.9.87版本，支持Firefox 0.9-3.0，Mozilla 1.0-1.8，Thunderbird 0.9-3.0的所有版本浏览器。<br />    除了官方网站外，该工具的扩展安装也可以通过链接<br />    <a href="/Files/flyingis/javascript_debugger-0.9.87.rar"><font color="#000080">http://www.blogjava.net/Files/flyingis/javascript_debugger-0.9.87.rar</font></a>进行本地下载。<br />  <br />    另外有一些JavaScript专用IDE，有兴趣可以试用一下：<br />  <br />    Cardinal JavaScript IDE:<br />    <a href="http://home.earthlink.net/~mafriedman/ide/"><font color="#000080">http://home.earthlink.net/~mafriedman/ide/</font></a><br /><br />    JavaScript IDE for Eclipse:<br />    <a href="http://www.basement.org/archives/2005/09/js_eclipse_javascript_ide for.html"><font color="#000080">http://www.basement.org/archives/2005/09/js_eclipse_javascript_ide for.html</font></a><br /><br />    JavaScript IDE(共享软件):<br />    <a href="http://www.downloadjunction.com/product/software/42264/index.html"><font color="#000080">http://www.downloadjunction.com/product/software/42264/index.html</font></a></font>
<img src ="http://www.blogjava.net/flyingis/aggbug/53389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-06-16 20:16 <a href="http://www.blogjava.net/flyingis/archive/2006/06/16/53389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ECMAScript 基础</title><link>http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Tue, 13 Jun 2006 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/52484.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/52484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/52484.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JavaScript三大核心之一ECMAScript语言快速入门基础。<br>目前已更新：ECMAScript语言基本特点；原始数据类型；数据转换；Type Casting；引用类型；操作符和语句；Functions……<br>最近更新日期：2006-6-16&nbsp;&nbsp;<a href='http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html'>阅读全文</a><img src ="http://www.blogjava.net/flyingis/aggbug/52484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-06-13 15:36 <a href="http://www.blogjava.net/flyingis/archive/2006/06/13/52484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript 基本组成</title><link>http://www.blogjava.net/flyingis/archive/2006/06/11/51947.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sun, 11 Jun 2006 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/06/11/51947.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/51947.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/06/11/51947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/51947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/51947.html</trackback:ping><description><![CDATA[
		<font size="2">    <font color="#0000ff">JavaScript的学习，以</font><a class="" title="" href="http://www.nczonline.net/" target="_blank"><font color="#a52a2a">Nicholas C.Zakas</font></a><font color="#0000ff">的《Professional JavaScript for Web Developers》为基础材料。</font><br /><br />    JavaScript作为一种网络客户端的脚本语言，由以下三部分组成：<br /><br />1.  ECMAScript--JavaScript的核心，描述了语言的基本语法和对象。<br /><br />    ECMAScript经历了三个版本的更新，现在大多数网络浏览器都支持Edition3。ECMAScript主要提供语言相关的信息与标准，如语法、类型、声明、关键字、保留字、操作运算符、对象等等。<br /><br />2.  DOM--The Document Object Model，描述了作用于网页内容的方法和接口。<br /><br />    DOM是HTML的一个应用程序接口，它也经历了三个版本的更新，其中以第一和第二个版本使用最为广泛，在第二个版本中，最重要的特性莫过于提供了事件响应的接口，处理CSS的接口，移动窗口的接口，并且能够控制代码树的结构等等。<br />    除了使用最多的DOM Core和DOM HTML标准接口外，其他的部分语言也拥有自己的DOM标准，如SVG、MathML、SMIL。<br /><br />3.  BOM--The Browser Object Model，描述了和浏览器交互的方法和接口。<br /><br />    例如弹出新的浏览器窗口，移动、改变和关闭浏览器窗口，提供详细的网络浏览器信息（navigator object），详细的页面信息（location object），详细的用户屏幕分辨率的信息（screen object），对cookies的支持等等。BOM作为JavaScript的一部分并没有相关标准的支持，每一个浏览器都有自己的实现，虽然有一些非事实的标准，但还是给开发者带来一定的麻烦。</font>
<img src ="http://www.blogjava.net/flyingis/aggbug/51947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-06-11 11:37 <a href="http://www.blogjava.net/flyingis/archive/2006/06/11/51947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>了解 Ajax 框架--充电开始</title><link>http://www.blogjava.net/flyingis/archive/2006/06/10/51868.html</link><dc:creator>Flyingis</dc:creator><author>Flyingis</author><pubDate>Sat, 10 Jun 2006 09:42:00 GMT</pubDate><guid>http://www.blogjava.net/flyingis/archive/2006/06/10/51868.html</guid><wfw:comment>http://www.blogjava.net/flyingis/comments/51868.html</wfw:comment><comments>http://www.blogjava.net/flyingis/archive/2006/06/10/51868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyingis/comments/commentRss/51868.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyingis/services/trackbacks/51868.html</trackback:ping><description><![CDATA[
		<font size="2">    作者：<a class="" title="" href="/flyingis/" target="_blank"><font color="#000080">Flyingis</font></a></font>
		<br />    <br /><font size="2">    这学期一直忙着找工作、毕业论文和毕业前的各种手续，学习速度放慢了不少，大多数时候只是上来看看。现在正式开始充电，补充新的知识，为了工作需要，首先从客户端技术Ajax开始。<br /><br />    Ajax高手在Blogjava上有不少，还有众多潜水高手，在这里，随笔记录的仅仅是自己的学习轨迹，不足之处希望大伙能指出，和大家一起讨论，帮助我提高。“</font><font color="#000000"><font size="2">工欲善其事，必先利其器”，首先总结一些Ajax常用的框架。<br /><br />    Ajax框架有基于服务器端和客户端两种，多数是开源实现，并且发展速度很快。<br /><br />    <strong>服务器端框架</strong><br /><br />    1.  Sajax<br />    Sajax拥有活跃的社区，支持Perl、Python、Ruby、ASP等语言，每种语言Sajax都有一个简单的库，利用Sajax可以直接从JavaScript调用服务器代码。<br />    官方网站：</font><a href="http://www.modernmethod.com/sajax"><font color="#000080" size="2">http://www.modernmethod.com/sajax</font></a><font size="2"> 。<br /><br />    2.  JSON<br />    <span class="top11">JSON作为JavaScript语言的一个子集，是一种描述数据的轻量级语法，和XML类似，用于交换数据。XML相关的有XML-RPC，JSON也有JSON-RPC远程调用协议，它在Java、Ruby、Python、Perl中都有实现。<br />    网上参考：<a href="http://www.crockford.com/json/"><font color="#000080">http://www.crockford.com/json/</font></a> 。<br /></span><br />    3.  DWR<br />    DWR这个字眼出现的频率较高，在网上搜索了一下，查到DWR全称是Direct Web Remoting，代表着可以直接从JavaScript远程调用Java方法。使用DWR需要一些额外的配置，如编辑Web应用的描述文件，编辑DWR的配置文件，来指定可以远程创建和调用的类，从这种方式可以看出其中存在一些安全隐患，但是，由于DWR支持常用的Struts/WebWork/Tapestry Web框架，在Apache协议下发布，加上丰富的文档资料，使得DWR在Java领域非常流行。<br />    介绍DWR的相关文章可以参考：<br />    <a class="" title="" href="/mstar/category/2359.html" target="_blank"><font color="#000080">http://www.blogjava.net/mstar/category/2359.html</font></a><br />    <a class="" title="" href="/zkjbeyond/category/11348.html" target="_blank"><font color="#000080">http://www.blogjava.net/zkjbeyond/category/11348.html</font></a><a href="/mstar/archive/2005/08/08/9561.aspx"></a><br />    更多信息可以访问：<a href="http://getahead.ltd.uk/dwr/index"><font color="#000080">http://getahead.ltd.uk/dwr/index</font></a> 。<br /><br />    4.  Buffalo<br />    Buffalo是由国人开发的Ajax框架。Buffalo中定义了Web远程调用的传输基础，并且将远程调用对象完整的序列化到了本地，成为可以被JavaScript编程触及的对象。Buffalo中的重要组件-BuffaloBinding，提供了将JavaScript对象绑定到HTML元素的能力。这种绑定将是无侵入的，只需要在HTML元素中加入若干个不影响排版的属性，即可将数据与界面绑定。Buffalo1.2引入了新的众多的特性包括，新的重新改写的Spring集成，与流行JavaScript库Prototype的集成，支持浏览器前进后退按钮等等。<br />    下载链接：<font color="#000080" size="2"><a class="" title="" href="http://www.amowa.net/buffalo/" target="_blank"><font color="#000080">http://www.amowa.net/buffalo/</font></a> <font color="#000000">。[引自CSDN]</font></font><br /><br />    5.  Ajax.Net<br />    顾名思义，Ajax.Net是.Net平台下的Ajax框架，它可以从JavaScript客户端调用.Net方法。Ajax.Net所包括的DLL可以和VB.Net/C#配合使用，其相关文档也很多。参考网站：<a href="http://ajax.net/"><font color="#000080">http://ajax.net/</font></a> 。<br /><br />    6.  Atlas<br />    这是Microsoft的一个项目，其特点在于提供客户端脚本框架、ASP.Net控件及Web服务集成。微软的项目，还是值得关注的。<br />    相关介绍：<a href="http://blog.joycode.com/saucer/archive/2005/06/30/58284.aspx/"><font color="#000080">http://blog.joycode.com/saucer/archive/2005/06/30/58284.aspx/</font></a> 。<br /><br />    7.  Ruby on Rails<br />    这个就不用多说了，前段时间开始就炒的异常火热的一个框架，建立在Ruby语言基础上，其最显著的特性是能够快速开发Web应用，使用Rails会觉得Ajax非常简单。Rails拥有许多JavaScript库，另外有一个模块封装了Ruby的JavaScript调用。对各种Rails的介绍，可以参考<a class="" title="" href="/calvin/" target="_blank"><font color="#000080">江南白衣</font></a>的文章<a class="" title="" href="/calvin/archive/2005/11/22/20938.html" target="_blank"><font color="#000080">各系Rails大点兵</font></a>。网站参考：<a href="http://www.rubyonrails.org/"><font color="#000080">http://www.rubyonrails.org/</font></a> 。<br /><br />    <strong>客户端框架</strong><br /><br />    1.  Dojo<br />    最老的框架之一，2004年9月开始开发，它具有一个独特的特性，即支持向后和向前按钮，通过注册一个回调的方法，使得用户在点击向后和向前按钮的时候调用改方法，实现后退前进的功能。Dojo是相对成熟的工具包之一。<br />    具体内容参考网站：</font><a href="http://dojotoolkit.org/"><font color="#000080" size="2">http://dojotoolkit.org/</font></a><font size="2"> 。<br /><br />    2.  Rico<br />    Rico侧重点在于拖放效果、数据网格、自定义页面布局、淡入淡出等人性化效果的轻易实现，使用Rico需要Prototype.js库来支撑，</font><a class="" title="" href="/zkjbeyond/" target="_blank"><font color="#000080" size="2">zkjbeyond</font></a><font size="2">有关于Prototype.js的</font><a class="" title="" href="/zkjbeyond/category/7038.html" target="_blank"><font color="#000080" size="2">基本介绍</font></a><font size="2">。<br />    Rico官方网站：</font><a href="http://openrico.org/home.page/"><font color="#000080" size="2">http://openrico.org/home.page/</font></a><font size="2"> 。<br /><br />    3.  Flash/JavaScript集成库<br />    当我刚进入大学的时候，Flash技术和JavaScript特效都是当时网络中最流行的字眼，但Flash丰富的用户体验更让人印象深刻，<u>小小</u>系列以及<u>雪村</u>的网络MTV都是比较早的作品，还有众多Flash制作的网站。在现在Ajax流行的环境下，Flash的臃肿和需要安装插件机制使得它不再那么耀眼，但是如果要混合使用Flash和Ajax，则可以使用Flash/JavaScript集成库，这个工具集可以使得JavaScript和ActionScript（Flash中支持的语言）能够相互调用，传递数据。<br />    相关资料可以访问：</font><a href="http://weblogs.macromedia.com/flashjavascript/"><font color="#000080" size="2">http://weblogs.macromedia.com/flashjavascript/</font></a><font size="2"> 。<br /><br />    4.  SACK<br />    SACK是一个针对XMLHttpRequest的瘦包装器，可以简化Ajax开发，它由一个JavaScript文件组成，包含很少的代码，入门比较方便，它最主要的特性应该就是足够简单。<br />    相关信息可以访问：</font><a href="http://twilightuniverse.com/projects/sack/"><font color="#000080" size="2">http://twilightuniverse.com/projects/sack/</font></a><font size="2"> 。<br /><br />    5.  RSLite<br />    RSLite是远程脚本的一个实现，从2000年开始发展。它的特性在于拥有广泛浏览器的支持（因为没有利用XMLHttpRequest对象），它是一个轻量级的框架。<br />    网站信息：</font><a href="http://www.ashleyit.com/rs/rslite/"><font color="#000080" size="2">http://www.ashleyit.com/rs/rslite/</font></a><font size="2"> 。<br /><br />    6.  Google AJAXSTL<br />    Google AJAXSTL是使用XPath的XSL转换（XSLT）的JavaScript实现。该工具包很小，并且还不完善，但作为使用AJAX的先驱，还是应该给予一定的关注。<br /></font>    <font size="2">开源链接：</font><a href="http://goog-ajaxslt.sourceforge.net/"><font color="#000080" size="2">http://goog-ajaxslt.sourceforge.net/</font></a><font size="2"> 。<br /><br />    这些是个人最初所关注的一些框架，</font><a class="" title="" href="/computerboy/" target="_blank"><font color="#000080" size="2">Computerboy</font></a><font size="2">的</font><a class="" title="" href="/computerboy/archive/2006/06/04/50328.aspx" target="_blank"><font color="#000080" size="2">Ajax框架汇总</font></a><font size="2">和</font><a class="" title="" href="/computerboy/archive/2006/06/04/50256.html" target="_blank"><font color="#000080" size="2">Ajax Resources</font></a><font size="2">有更多的对Ajax框架及相关资源的介绍。</font></font><img src ="http://www.blogjava.net/flyingis/aggbug/51868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyingis/" target="_blank">Flyingis</a> 2006-06-10 17:42 <a href="http://www.blogjava.net/flyingis/archive/2006/06/10/51868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>