﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑咖啡-随笔分类-javaScript</title><link>http://www.blogjava.net/kyleYang/category/42720.html</link><description>孩儿立志出乡关，学不成名誓不还。
风华正茂乾坤地，人生无处不青山。
光阴如同流水去，珍惜时光最宝贵。
鹏程万里靠自己，飞黄腾达青少年。
</description><language>zh-cn</language><lastBuildDate>Wed, 11 Aug 2010 07:56:13 GMT</lastBuildDate><pubDate>Wed, 11 Aug 2010 07:56:13 GMT</pubDate><ttl>60</ttl><item><title>JavaScript跨浏览器的添加删除事件绑定函数</title><link>http://www.blogjava.net/kyleYang/archive/2010/08/11/328466.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 11 Aug 2010 00:30:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/08/11/328466.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/328466.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/08/11/328466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/328466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/328466.html</trackback:ping><description><![CDATA[
		<h3>javascript跨浏览器添加事件绑定 bind()</h3>
		<p sizset="17" sizcache="4">IE 的<strong>事件绑定</strong>函数是<strong> attachEvent</strong>；而 <a title="Firefox" href="http://www.js8.in/tag/firefox"><font color="#2f63b3">Firefox</font></a>, Safari 是 <strong>addEventListener</strong>；Opera 则两种都支持。使用jQuery就可以使用简单的bind()，或者$().click()之类的函数解决，而如果不使用<a title="JavaScript" href="http://www.js8.in/category/%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af/javascript-%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af"><font color="#2f63b3">JavaScript</font></a>框架的时候，大家可是使用下面的封装bind()函数。        <br /><span style="COLOR: #006600; FONT-STYLE: italic">/************************************<br />* 添加事件绑定<br />* @param obj   : 要绑定事件的元素<br />* @param type : 事件名称。不加 "on". 如 : "click" 而不是 "onclick".<br />* @param fn    : 事件处理函数<br />************************************/</span><br /><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span> bind<span style="COLOR: #009900">(</span> obj<span style="COLOR: #339933">,</span> type<span style="COLOR: #339933">,</span> fn <span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="FONT-WEIGHT: bold; COLOR: #000066">if</span><span style="COLOR: #009900">(</span> obj.<span style="COLOR: #660066">attachEvent</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><br />        obj<span style="COLOR: #009900">[</span><span style="COLOR: #3366cc">'e'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span> fn<span style="COLOR: #339933">;</span><br />        obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span>obj<span style="COLOR: #009900">[</span><span style="COLOR: #3366cc">'e'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">(</span> window.<span style="COLOR: #660066">event</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><br />        obj.<span style="COLOR: #660066">attachEvent</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">'on'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">,</span> obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="FONT-WEIGHT: bold; COLOR: #000066">else</span><br />        obj.<span style="COLOR: #660066">addEventListener</span><span style="COLOR: #009900">(</span> type<span style="COLOR: #339933">,</span> fn<span style="COLOR: #339933">,</span><span style="FONT-WEIGHT: bold; COLOR: #003366">false</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span></p>
		<p>
				<span id="more-408">
				</span>例如给document添加一个点击事件      	<br /><span style="FONT-WEIGHT: bold; COLOR: #003366">var</span> fn<span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="COLOR: #000066">alert</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">"Hello, World!!"</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="COLOR: #339933">;</span><br />bind<span style="COLOR: #009900">(</span>document<span style="COLOR: #339933">,</span><span style="COLOR: #3366cc">"click"</span><span style="COLOR: #339933">,</span> fn<span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span></p>
		<h3>删除事件绑定 unbind()</h3>
		<p>unbind()对于上面的bind()函数      	<br /><span style="COLOR: #006600; FONT-STYLE: italic">/************************************<br /> * 删除事件绑定<br /> * @param obj : 要删除事件的元素<br /> * @param type : 事件名称。不加 "on". 如 : "click" 而不是 "onclick"<br /> * @param fn : 事件处理函数<br /> ************************************/</span><br /><span style="FONT-WEIGHT: bold; COLOR: #003366">function</span> unbind<span style="COLOR: #009900">(</span> obj<span style="COLOR: #339933">,</span> type<span style="COLOR: #339933">,</span> fn <span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><span style="FONT-WEIGHT: bold; COLOR: #000066">if</span><span style="COLOR: #009900">(</span> obj.<span style="COLOR: #660066">detachEvent</span><span style="COLOR: #009900">)</span><span style="COLOR: #009900">{</span><br />        obj.<span style="COLOR: #660066">detachEvent</span><span style="COLOR: #009900">(</span><span style="COLOR: #3366cc">'on'</span><span style="COLOR: #339933">+</span>type<span style="COLOR: #339933">,</span> obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><br />        obj<span style="COLOR: #009900">[</span>type<span style="COLOR: #339933">+</span>fn<span style="COLOR: #009900">]</span><span style="COLOR: #339933">=</span><span style="FONT-WEIGHT: bold; COLOR: #003366">null</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span><span style="FONT-WEIGHT: bold; COLOR: #000066">else</span><br />        obj.<span style="COLOR: #660066">removeEventListener</span><span style="COLOR: #009900">(</span> type<span style="COLOR: #339933">,</span> fn<span style="COLOR: #339933">,</span><span style="FONT-WEIGHT: bold; COLOR: #003366">false</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span><span style="COLOR: #009900">}</span></p>
		<p>例如删除第一个绑定的document点击事件：<br />unbind<span style="COLOR: #009900">(</span>document<span style="COLOR: #339933">,</span><span style="COLOR: #3366cc">"click"</span><span style="COLOR: #339933">,</span>fn<span style="COLOR: #009900">)</span><span style="COLOR: #339933">;<br />摘自：<a href="http://www.js8.in/408.html">http://www.js8.in/408.html</a></span></p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/328466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-08-11 08:30 <a href="http://www.blogjava.net/kyleYang/archive/2010/08/11/328466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实现JavaScript跨浏览器</title><link>http://www.blogjava.net/kyleYang/archive/2010/08/11/328465.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 11 Aug 2010 00:28:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/08/11/328465.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/328465.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/08/11/328465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/328465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/328465.html</trackback:ping><description><![CDATA[
		<p>开发跨浏览器的JavaScript，并不是一件很容易的事，下面是一些经验总结。</p>
		<p>一、动态向表中添加行</p>
		<ul>
				<li>问题：IE中，不能将行增加到表table。 
</li>
				<li>解决方法：将行增加到表体tbody。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/addrow.html">点击查看</a></li>
		</ul>
		<p>二、动态设置元素style属性</p>
		<ul>
				<li>问题：IE下支持object.style.cssText="style:value"，Firefox下使用object.setAttribute("style", value) 
</li>
				<li>解决方法：统一用object.style.属性＝值。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/setstyle.html">点击查看</a></li>
		</ul>
		<p>三、动态设置元素的Class属性</p>
		<ul>
				<li>问题：IE下使用object.setAttribute("className", value)，Firefox下使用object.setAttribute("class", value)。 
</li>
				<li>解决方法：统一用object.className=value。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/setclass.html">点击查看</a></li>
		</ul>
		<p>四、动态创建Input元素</p>
		<ul>
				<li>问题：IE中先添加元素，后设置的属性不起作用。 
</li>
				<li>解决方法：先添加属性，再添加元素。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/addinput.html">点击查看</a></li>
		</ul>
		<p>五、动态设置标签内容</p>
		<ul>
				<li>问题：IE中用innerText属性，相反地，Firefox下用textContent属性。 
</li>
				<li>解决方法：先判断浏览器类型，再分别设置，当然也可以同时设置。还有一种方法就是用innerHTML来替换。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/text.html">点击查看</a></li>
		</ul>
		<p>六、增加和删除Option</p>
		<ul>
				<li>问题：增加Option时，Firefox下不支持object.add方法。删除Option时，Firefox下不支持object.options .remove方法。 
</li>
				<li>解决方法：增加Option时，使用object.options.add方法。删除Option时，使用object.remove方法。另外也可以用DOM的AppendChild和removeChild方法。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/option.html">点击查看</a>  </li>
		</ul>
		<p>七、动态创建单选按钮</p>
		<ul>
				<li>问题：IE不能用setAttribute方法添加name属性，相反地，Firefox下不能用createElement(htmlStr)来添加name属性。 
</li>
				<li>解决方法：先判断浏览器类型，再分别设置。当然也可以同时设置。 
</li>
				<li>示例：<a href="http://www.riafan.com/ajax/javascript/addradio.html">点击查看</a></li>
		</ul>
		<p>八、document.formName.item("itemName")</p>
		<ul>
				<li>问题：IE下，可以使用 document.formName.item("itemName") 或 document.formName.elements ["elementName"]；Firefox下，只能使用document.formName.elements["elementName"]。 
</li>
				<li>解决方法：统一使用document.formName.elements["elementName"]。 </li>
		</ul>
		<p>九、动态创建单选按钮</p>
		<ul>
				<li>问题：IE下，可以使用()或[]获取集合类对象；Firefox下，只能使用 []获取集合类对象。 
</li>
				<li>解决方法：统一使用[]获取集合类对象。 </li>
		</ul>
		<p>十、自定义属性</p>
		<ul>
				<li>问题：IE下，可以使用获取常规属性的方法来获取自定义属性，也可以使用 getAttribute() 获取自定义属性；Firefox下，只能使用 getAttribute() 获取自定义属性 
</li>
				<li>解决方法：统一通过 getAttribute() 获取自定义属性。 </li>
		</ul>
		<p>十一、eval("idName")</p>
		<ul>
				<li>问题：IE下，可以使用 eval("idName") 或 getElementById("idName") 来取得 id 为 idName 的HTML对象；Firefox下，只能使用 getElementById("idName") 来取得 id 为 idName 的HTML对象。 
</li>
				<li>解决方法：统一用 getElementById("idName") 来取得 id 为 idName 的HTML对象。 </li>
		</ul>
		<p>十二、event.srcElement</p>
		<ul>
				<li>问题：IE下，even对象有srcElement属性，但是没有target属性；Firefox下，even对象有target属性，但是没有srcElement属性。 
</li>
				<li>解决方法：使用srcObj = event.srcElement ? event.srcElement : event.target; </li>
		</ul>
		<p>十三、访问的父元素</p>
		<ul>
				<li>问题：在IE下，使用obj.parentElement或obj.parentNode访问obj的父结点；在firefox下，使用obj.parentNode访问obj的父结点。 
</li>
				<li>解决方法：因为firefox与IE都支持DOM，因此统一使用obj.parentNode 来访问obj的父结点。 </li>
		</ul>
		<p>十四、innerText</p>
		<ul>
				<li>问题：innerText在IE中能正常工作，但是innerText在FireFox中却不行。 
</li>
				<li>解决方法：在非IE浏览器中使用textContent代替innerText。 </li>
		</ul>
		<p>十五、模态和非模态窗口问题</p>
		<ul>
				<li>问题：IE下，可以通过showModalDialog和showModelessDialog打开模态和非模态窗口；Firefox下则不能。 
</li>
				<li>解决方法：直接使用 window.open(pageURL,name,parameters) 方式打开新窗口。如果需要将子窗口中的参数传递回父窗口，可以在子窗口中使用window.opener来访问父窗口。如果需要父窗口控制子窗口的话，使用var subWindow = window.open(pageURL,name,parameters); 来获得新开的窗口对象。 </li>
		</ul>
		<p>十六、frame和iframe问题</p>
		<ul>
				<li>问题：要访问frame对象，IE下使用window.frameId或者window.frameName来访问这个frame对象；Firefox下使用window.frameName来访问这个frame对象； 
</li>
				<li>解决方法：统一使用 window.document.getElementById("frameId") 来访问这个frame对象。在IE和Firefox中都可以使用window.document.getElementById("frameId").src 或window.frameName.location来切换frame的内容；如果需要将frame中的参数传回父窗口，可以在frame中使用parent关键字来访问父窗口。</li>
		</ul>
<img src ="http://www.blogjava.net/kyleYang/aggbug/328465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-08-11 08:28 <a href="http://www.blogjava.net/kyleYang/archive/2010/08/11/328465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>setCapture和releaseCapture的小应用</title><link>http://www.blogjava.net/kyleYang/archive/2010/06/22/324190.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 22 Jun 2010 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/06/22/324190.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/324190.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/06/22/324190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/324190.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/324190.html</trackback:ping><description><![CDATA[
		<p>web开发和windows开发最大的区别就是windows开发是有状态的,而web开发是无状态的,在windows中,一切操作都可以由程序来控制 ,除非强制执行ctrl+alt+del;但web操作就不一样了,即使执行很重要的操作,用户一点击浏览器关闭按钮,就将前面操作成果化为乌有.尽管可以在onunload事件中加些代码,让用户可以选择是否退出,但不能从根本上解决问题!<br />        前几天,从网上看到setCapture方法,了解了一下,大体是这样的意思,当在IE文档某个区域中使用了这个方法,并且写了onclick或者onmouse***等有关的鼠标事件方法,那么它就会监视相应的鼠标操作,即使你的鼠标移出了IE,它也一样能捕获到.如果你在某div中的onclick事件中写了一个alert命令,这时,你点击的关闭按钮,它也一样会弹出alert窗口.releaseCapture与setCapture方法相反,释放鼠标监控.<br />        利用这个特性,我们可以延缓IE的关闭窗口等破坏性操作,将一些重要的操作能够在破坏性操作执行之前得到处理.<br />        有一点遗憾:setCapture和releaseCapture 不支持键盘事件.只对onmousedown, onmouseup, onmousemove, onclick, ondblclick, onmouseover, onmouseout这样的鼠标事件起作用.<br />        下面是一个小例子,若我们要对divMain这个div元素里面的内容进行保护: <br />         1). 对divMain执行setCapture方法: <br />document.getElementById("divMain").setCapture();<br />2).加入一按钮btnChange,可以进行setCapture和releaseCapture切换,定义一全局变量;<br />var isFreeze = true; <br />3).在btnChange的onclick事件中,加入下列代码:<br />function change_capture(obj)<br />...{<br />        isFreeze = !isFreeze;<br />    if(isFreeze)<br />    ...{<br />        obj.value = "releaseCapture";<br />        document.getElementById("divMain").setCapture();<br />    }<br />    else<br />    ...{<br />        obj.value = "setCapture";<br />        alert('保存！');                        //可以执行重要操作<br />        document.getElementById("divMain").releaseCapture();<br />    }<br />}4).divMain的onclick事件中,加入下列代码:<br />function click_func()<br />...{<br />    if(event.srcElement.id == "divMain")<br />    ...{<br />        alert("处理中...");                                                            //常规操作<br />        document.getElementById("divMain").setCapture();<br />    }<br />    else<br />    ...{<br />        if(isFreeze &amp;&amp; event.srcElement.id != "btnChange")<br />        ...{<br />            alert('未执行releaseCapture,不能点击');<br />            document.getElementById("divMain").setCapture();<br />        }<br />    }<br />}5).对ALT+F4进行处理,在body的onkeydown事件中加入下列代码:<br />function keydown_func()<br />...{<br />    if (event.keyCode==115  &amp;&amp; event.altKey)            //ALT+F4<br />    ...{<br />        if(isFreeze)<br />        ...{<br />                alert('保存！');                                        //可以执行重要操作<br />               }            <br />            //window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");            <br />        //return false;<br />        }<br />        document.getElementById("divMain").setCapture();<br />}完整代码如下:<br />&lt;HTML&gt; <br />    &lt;head&gt;<br />        &lt;title&gt;setCapture和releaseCapture的小应用&lt;/title&gt;<br />        &lt;SCRIPT LANGUAGE="JavaScript"&gt;... <br />        &lt;!--      <br />            var isFreeze = true;<br />            <br />            function click_func()<br />            ...{<br />                if(event.srcElement.id == "divMain")<br />                ...{<br />                    alert("处理中...");                                                            //常规操作<br />                    document.getElementById("divMain").setCapture();<br />                }<br />                else<br />                ...{<br />                    if(isFreeze &amp;&amp; event.srcElement.id != "btnChange")<br />                    ...{<br />                        alert('未执行releaseCapture,不能点击');<br />                        document.getElementById("divMain").setCapture();<br />                    }<br />                }<br />            }<br />            <br />            function keydown_func()<br />            ...{<br />                <br />                if (event.keyCode==115  &amp;&amp; event.altKey)            //ALT+F4<br />                ...{<br />                    if(isFreeze)<br />                    ...{<br />                alert('保存！');                                        //可以执行重要操作<br />               }<br />            <br />            //window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");<br />            <br />                    //return false;<br />        }<br />        document.getElementById("divMain").setCapture();<br />            }<br />            <br />            function change_capture(obj)<br />            ...{<br />                isFreeze = !isFreeze;<br />                if(isFreeze)<br />                ...{<br />                    obj.value = "releaseCapture";<br />                    document.getElementById("divMain").setCapture();<br />                }<br />                else<br />                ...{<br />                    obj.value = "setCapture";<br />                    alert('保存！');                                    //可以执行重要操作<br />                    document.getElementById("divMain").releaseCapture();<br />                }<br />            }<br />        //--&gt; <br />        &lt;/SCRIPT&gt; <br />    &lt;/head&gt;<br />    &lt;BODY  onkeydown="keydown_func();"&gt; <br />        &lt;div id="divMain" style="width:500px;height:400px;border:1px solid #999;padding:2px" onclick="click_func();"&gt;<br />            点一下IE的菜单或者按钮看看:) 又或者IE窗口外的地方<br />            &lt;input type="button" value="releaseCapture" onclick="change_capture(this);" id="btnChange"&gt;<br />            &lt;script language="javascript"&gt;...<br />                document.getElementById("divMain").setCapture();<br />            &lt;/script&gt;<br />        &lt;/div&gt; <br />        <br />    &lt;/BODY&gt; <br />&lt;/HTML&gt;注意:该实例仅能应用于IE</p>
		<p>
				<br />本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/redleaf1995/archive/2008/03/06/2154784.aspx">http://blog.csdn.net/redleaf1995/archive/2008/03/06/2154784.aspx</a></p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/324190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-06-22 17:08 <a href="http://www.blogjava.net/kyleYang/archive/2010/06/22/324190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>call、apply、caller、callee使用方法</title><link>http://www.blogjava.net/kyleYang/archive/2010/06/22/324189.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 22 Jun 2010 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/06/22/324189.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/324189.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/06/22/324189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/324189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/324189.html</trackback:ping><description><![CDATA[
		<p>
				<strong>一、call 方法 <br /></strong>调用一个对象的一个方法，以另一个对象替换当前对象(其实就是更改对象的内部指针，即改变对象的this指向的内容)。 <br />Js代码 <br />call([thisObj[,arg1[, arg2[, [,.argN]]]]]) <br />参数 <br />thisObj <br />可选项。将被用作当前对象的对象。 <br />arg1, arg2, , argN <br />可选项。将被传递方法参数序列。 <br />说明 <br />call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数，那么 Global 对象被用作 thisObj。 <br />Js代码</p>
		<div class="codetitle">
				<span style="CURSOR: pointer" onxxxxx="doCopy('code66436')">
						<u>复制代码</u>
				</span>代码如下:</div>
		<div class="codebody">
				<br />&lt;input type="text" id="myText" value="input text"&gt; Code <br />function Obj(){this.value="对象！";} <br />var value="global 变量"; <br />function Fun1(){alert(this.value);} <br />window.Fun1(); //global 变量 <br />Fun1.call(window); //global 变量 <br />Fun1.call(document.getElementById('myText')); //input text <br />Fun1.call(new Obj()); //对象！</div>
		<br />Js代码 <br />Code <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code58150')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />var first_object = { <br />num: 42 <br />}; <br />var second_object = { <br />num: 24 <br />}; <br />function multiply(mult) { <br />return this.num * mult; <br />} <br />multiply.call(first_object, 5); // returns 42 * 5 <br />multiply.call(second_object, 5); // returns 24 * 5</div><br /><strong>二、apply方法</strong><br />apply方法的第一个参数也是要传入给当前对象的对象，即函数内部的this。后面的参数都是传递给当前对象的参数。 <br />对于apply和call两者在作用上是相同的，但两者在参数上有区别的。对于第一个参数意义都一样，但对第二个参数：apply传入的是一个参数数组，也就是将多个参数组合成为一个数组传入，而call则作为call的参数传入（从第二个参数开始）。 <br />如 func.call(func1,var1,var2,var3)对应的apply写法为：func.apply(func1,[var1,var2,var3])同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。 <br />Js代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code36124')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />var func=new function(){this.a="func"} <br />var myfunc=function(x,y){ <br />var a="myfunc"; <br />alert(this.a); <br />alert(x + y); <br />} <br />myfunc.call(func,"var"," fun");// "func" "var fun" <br />myfunc.apply(func,["var"," fun"]);// "func" "var fun"</div><br /><strong>三、caller 属性 <br /></strong>返回一个对函数的引用，即调用了当前函数的函数体。 <br />functionName.caller :functionName 对象是所执行函数的名称。 <br />说明: <br />对于函数来说，caller 属性只有在函数执行时才有定义。 如果函数是由 JScript 程序的顶层调用的，那么 caller 包含的就是 null 。如果在字符串上下文中使用 caller 属性，那么结果和 functionName.toString 一样，也就是说，显示的是函数的反编译文本。 <br />Js代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code75645')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />function CallLevel(){ <br />if (CallLevel.caller == null) <br />alert("CallLevel was called from the top level."); <br />else <br />alert("CallLevel was called by another function:\n"+CallLevel.caller); <br />} <br />function funCaller(){ <br />CallLevel(); <br />} <br />CallLevel(); <br />funCaller()</div><br /><strong>四、callee属性 <br /></strong>返回正被执行的 Function 对象，也就是所指定的 Function 对象的正文。 <br />[function.]arguments.callee:可选项 function 参数是当前正在执行的 Function 对象的名称。 <br />说明: <br />callee 属性的初始值就是正被执行的 Function 对象。 <br />callee 属性是 arguments 对象的一个成员，它表示对函数对象本身的引用，这有利于匿 <br />函数的递归或者保证函数的封装性，例如下边示例的递归计算1到n的自然数之和。而该属性 <br />仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性，这个属性有时 <br />用于验证还是比较好的。arguments.length是实参长度，arguments.callee.length是 <br />形参长度，由此可以判断调用时形参长度是否和实参长度一致。 <br />Js代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code57082')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />//callee可以打印其本身 <br />function calleeDemo() { <br />alert(arguments.callee); <br />} <br />//用于验证参数 <br />function calleeLengthDemo(arg1, arg2) { <br />if (arguments.length==arguments.callee.length) { <br />window.alert("验证形参和实参长度正确！"); <br />return; <br />} else { <br />alert("实参长度：" +arguments.length); <br />alert("形参长度： " +arguments.callee.length); <br />} <br />} <br />//递归计算 <br />var sum = function(n){ <br />if (n &lt;= 0) <br />return 1; <br />else <br />return n ＋arguments.callee(n - 1) <br />}</div><br /><strong>五、bind</strong><br />Js代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code39328')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />var first_object = { <br />num: 42 <br />}; <br />var second_object = { <br />num: 24 <br />}; <br />function multiply(mult) { <br />return this.num * mult; <br />} <br />Function.prototype.bind = function(obj) { <br />var method = this, <br />temp = function() { <br />return method.apply(obj, arguments); <br />}; <br />return temp; <br />} <br />var first_multiply = multiply.bind(first_object); <br />first_multiply(5); // returns 42 * 5 <br />var second_multiply = multiply.bind(second_object); <br />second_multiply(5); // returns 24 * 5</div><br /><strong>六、JS闭包(Closure)</strong><br />所谓“闭包”，指的是一个拥有许多变量和绑定了这些变量的环境的表达式（通常是一个函数），因而这些变量也是该表达式的一部分。 <br />关于闭包，最简单的描述就是 ECMAScript 允许使用内部函数－－即函数定义和函数表达式位于另一个函数的函数体内。而且，这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时，就会形成闭包。也就是说，内部函数会在外部函数返回后被执行。而当这个内部函数执行时，它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明（最初时）的值是外部函数返回时的值，但也会受到内部函数的影响。 <br />简而言之，闭包的作用就是在out function执行完并返回后，闭包使得Javascript的垃圾回收机制GC不会收回out function所占用的资源，因为out function的内部函数inner function的执行需要依赖out function中的变量。 <br />闭包的两个特点： <br />1、作为一个函数变量的一个引用 - 当函数返回时，其处于激活状态。 <br />2、一个闭包就是当一个函数返回时，一个没有释放资源的栈区。 <br />例1： <br />Html代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code66031')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />&lt;script type="text/javascript"&gt; <br />function setupSomeGlobals() { <br />// Local variable that ends up within closure <br />var num = 666; <br />// Store some references to functions as global variables <br />gAlertNumber = function() { alert(num); } <br />gIncreaseNumber = function() { num++; } <br />gSetNumber = function(x) { num = x; } <br />} <br />&lt;/script&gt; <br />&lt;button onclick="setupSomeGlobals()"&gt;生成 - setupSomeGlobals()&lt;/button&gt; <br />&lt;button onclick="gAlertNumber()"&gt;输出值 - gAlertNumber()&lt;/button&gt; <br />&lt;button onclick="gIncreaseNumber()"&gt;增加 - gIncreaseNumber()&lt;/button&gt; <br />&lt;button onclick="gSetNumber(5)"&gt;赋值5 - gSetNumber(5)&lt;/button&gt;</div><br />例2： <br />Html代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code85921')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />&lt;script type="text/javascript"&gt; <br />function newClosure(someNum, someRef) { <br />// Local variables that end up within closure <br />var num = someNum; <br />var anArray = [1,2,3]; <br />var ref = someRef; <br />return function(x) { <br />num += x; <br />anArray.push(num); <br />alert('num: ' + num + <br />' nanArray ' + anArray.toString() + <br />' nref.someVar ' + ref.someVar); <br />} <br />} <br />var closure1 = newClosure(40, {someVar:' never-online'}) <br />var closure2 = newClosure(99, {someVar:' BlueDestiny'}) <br />closure1(4) <br />closure2(3) <br />&lt;/script&gt;</div><br />例3： <br />Js代码 <br /><div class="codetitle"><span style="CURSOR: pointer" onxxxxx="doCopy('code52809')"><u>复制代码</u></span> 代码如下:</div><div class="codebody"><br />&lt;script language="javascript"&gt; <br />/* 声明一个全局变量 - getImgInPositionedDivHtml - 并将一次调用一个外部函数表达式返回的内部函数赋给它。 <br />这个内部函数会返回一个用于表示绝对定位的 DIV 元素包围着一个 IMG 元素 的 HTML 字符串，这样一来， <br />所有可变的属性值都由调用该函数时的参数提供： <br />*/ <br />var getImgInPositionedDivHtml = (function(){ <br />/* 外部函数表达式的局部变量 - buffAr - 保存着缓冲数组。这个数组只会被创建一次，生成的数组实例对内部函数而言永远是可用的 <br />因此，可供每次调用这个内部函数时使用。 <br />其中的空字符串用作数据占位符，相应的数据 <br />将由内部函数插入到这个数组中： <br />*/ <br />var buffAr = [ <br />'&lt;div id="', <br />'', //index 1, DIV ID 属性 <br />'" style="position:absolute;top:', <br />'', //index 3, DIV 顶部位置 <br />'px;left:', <br />'', //index 5, DIV 左端位置 <br />'px;width:', <br />'', //index 7, DIV 宽度 <br />'px;height:', <br />'', //index 9, DIV 高度 <br />'px;overflow:hidden;\"&gt;&lt;img src=\"', <br />'', //index 11, IMG URL <br />'\" width=\"', <br />'', //index 13, IMG 宽度 <br />'\" height=\"', <br />'', //index 15, IMG 调蓄 <br />'\" alt=\"', <br />'', //index 17, IMG alt 文本内容 <br />'\"&gt;&lt;\/div&gt;' <br />]; <br />/* 返回作为对函数表达式求值后结果的内部函数对象。 <br />这个内部函数就是每次调用执行的函数 <br />- getImgInPositionedDivHtml( ... ) - <br />*/ <br />return (function(url, id, width, height, top, left, altText){ <br />/* 将不同的参数插入到缓冲数组相应的位置： <br />*/ <br />buffAr[1] = id; <br />buffAr[3] = top; <br />buffAr[5] = left; <br />buffAr[13] = (buffAr[7] = width); <br />buffAr[15] = (buffAr[9] = height); <br />buffAr[11] = url; <br />buffAr[17] = altText; <br />/* 返回通过使用空字符串（相当于将数组元素连接起来） <br />连接数组每个元素后形成的字符串： <br />*/ <br />return buffAr.join(''); <br />}); //:内部函数表达式结束。 <br />})();//自调用 <br />alert(getImgInPositionedDivHtml);//显示返回的函数 <br />alert(getImgInPositionedDivHtml("img.gif","img",100,50,0,0,"Test")); <br />&lt;/script&gt;</div><br />说明：其中的关键技巧在于通过执行一个单行（in-line）函数表达式创建一个额外的执行环境，而将该函数表达式返回的内部函数作为在外部代码中使用的函数。此时，缓冲数组被定义为函数表达式的一个局部变量。这个函数表达式只需执行一次，而数组也只需创建一次，就可以供依赖它的函数重复使用。 <br />七、原型链 <br />ECMAScript 为 Object 类型定义了一个内部 [[prototype]] 属性。这个属性不能通过脚本直接访问，但在属性访问器解析过程中，则需要用到这个内部[[prototype]] 属性所引用的对象链－－即原型链。可以通过一个公共的 prototype 属性，来对与内部的 [[prototype]] 属性对应的原型对象进行赋值或定义。 <br />例1： <br />&lt;script language="javascript"&gt; <br />function NumObject(formalParameter){ <br />this.testNumber = formalParameter; <br />} <br />function StrObject(formalParameter){ <br />this.testString = formalParameter; <br />} <br />//用 NumObject类的实例替换了所有与 StrObject类的实例相关联的原型。 <br />StrObject.prototype =new NumObject(6); <br />var objRef = new StrObject( "String_Value" ); <br />//当某个属性访问器尝试读取由 objectRef 所引用的对象的属性值时，整个原型链都会被搜索。 <br />//不论是在对象或对象的原型中，读取命名属性值的时候只返回首先找到的属性值。而当为对象的命名属性赋值时，如果对象自身不存在该属性则创建相应的属性。 <br />alert(objRef.testString);//output "String_Value" <br />alert(objRef.testNumber);//output "6" <br />alert(objRef.toString); <br />//StrObject 的实例拥有一个原型链。该链中的第一个对象是在创建后被指定给 StrObject 构造函数的 prototype 属性的 NumObject 的一个实例。NumObject 的实例也有一个原型，即与 Object.prototype 所引用的对象对应的默认的 Object 对象的原型。最后， Object.prototype 有一个值为 null 的原型，因此这条原型链到此结束。 <br />objRef.testNumber = 3;//对象自身不存在该属性则创建相应的属性 <br />alert(objRef.testNumber);//自身有了属性，属性访问器不会再进一步搜索原型链 <br />alert(NumObject.prototype.isPrototypeOf(objRef));// output "true" <br />&lt;/script&gt; <br /><img src ="http://www.blogjava.net/kyleYang/aggbug/324189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-06-22 17:06 <a href="http://www.blogjava.net/kyleYang/archive/2010/06/22/324189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Div样式总结</title><link>http://www.blogjava.net/kyleYang/archive/2010/03/19/315869.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 19 Mar 2010 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/03/19/315869.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/315869.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/03/19/315869.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/315869.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/315869.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1								&lt;div style="position:absolute; top:50px;left:50px; width:100px; height:100px;background-color:black;"&gt;				2										&lt;/div&gt;				3										&lt;div style="position:a...&nbsp;&nbsp;<a href='http://www.blogjava.net/kyleYang/archive/2010/03/19/315869.html'>阅读全文</a><img src ="http://www.blogjava.net/kyleYang/aggbug/315869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-03-19 09:48 <a href="http://www.blogjava.net/kyleYang/archive/2010/03/19/315869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Opener，parent，top，self等窗体属性的比较</title><link>http://www.blogjava.net/kyleYang/archive/2010/03/18/315795.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Thu, 18 Mar 2010 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/03/18/315795.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/315795.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/03/18/315795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/315795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/315795.html</trackback:ping><description><![CDATA[
		<p>1.Opener：获取创建本窗口的窗口的引用，不在本窗口的对象层次体系中</p>
		<p>只能在用window.open打开的页面中窗口中可以访问到opener属性，而对于用showModalDialog和showModalessDialog弹出的窗口则不能访问到，其opener属性引用为空。</p>
		<p>2.parent，top：获取的是对本窗口中对象层次元素的引用，对于用iframe或者frame的较有实际意义<br />对于用window.open和showModalDialog以及showModalessDialog打开的窗口而言，返回的是本窗口对象层次的元素引用，对于这种情况，parent，top，self三者的引用相同，都是当前的窗体自身，但对于窗体中的frame和iframe加载的页面元素来说，返回的则不相同。parent 返回的时包含该iframe的页面窗口引用，top则返回最上层的窗口引用，self当然返回的仍然是自身的引用。<br /> <br />3.self，window都是获取当前页面窗口自身对象的引用<br />每个页面自身代码中访问页面自身窗体可以采用self和window来访问到。<br /> <br />4.利用window参数传递和dialogArguments来获取弹出窗口的窗口引用<br />为了能够在用showModalDialog和showModalessDialog弹出窗口中引用到弹出窗口的引用，我们可以在showModalDialog和showModalessDialog的第二个参数传入window，然后再弹出的页面中用dialogArguments来获取刚才传入的window，即弹出窗口的窗口的引用。<br />转载：<a href="/standlww/archive/2009/04/28/267807.html">http://www.blogjava.net/standlww/archive/2009/04/28/267807.html</a><br /></p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/315795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-03-18 15:52 <a href="http://www.blogjava.net/kyleYang/archive/2010/03/18/315795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js常用代码</title><link>http://www.blogjava.net/kyleYang/archive/2010/03/09/314922.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 09 Mar 2010 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/03/09/314922.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/314922.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/03/09/314922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/314922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/314922.html</trackback:ping><description><![CDATA[1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键特效<br />&lt;table border oncontextmenu=return(false)&gt;&lt;td&gt;no&lt;/table&gt; 可用于Table  
<p><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">2. &lt;body onselectstart="return false"&gt; 取消选取、防止<b style="COLOR: black; BACKGROUND-COLOR: #99ff99">复制</b> <b style="COLOR: black; BACKGROUND-COLOR: #ffff66">javascript</b>技巧</span></span></p><p><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">3. onpaste="return false" 不准粘贴技巧</span></span></p><p><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">4. oncopy="return false;" oncut="return false;" 防止<b style="COLOR: black; BACKGROUND-COLOR: #99ff99">复制</b>的javascirpt特效<br /><br />5.&lt;noscript&gt;// 禁止另存为<br />      &lt;iframe src="*.htm"&gt;&lt;/iframe&gt;<br />   &lt;/noscript&gt;<br /><br /><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">功能：<b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">禁止</b>右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt</span></span></span></span></p><p><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">&lt;script language="<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">JavaScript</b>"&gt;<br />&lt;!--<br />function key(){ <br />   //<b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">禁止</b>Shift<br />   if(event.shiftKey){<br />      window.close();<br />   }<br />   //<b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">禁止</b>Alt<br />   if(event.altKey){<br />      window.close();<br />   }<br />   //<b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">禁止</b>Ctrl<br />   if(event.ctrlKey){<br />      window.close();<br />   }<br /><br />   return false;<br />}<br /><br />document.onkeydown=key;<br /><br />if (window.Event)<br />      document.captureEvents(Event.MOUSEUP);<br /><br />function nocontextmenu(){<br />   event.cancelBubble = true<br />   event.returnValue = false;<br />   return false;<br />}<br /><br />function norightclick(e){<br />   if (window.Event){<br />      if (e.which == 2 || e.which == 3)<br />      return false;<br />   }<br />   else<br />      if (event.button == 2 || event.button == 3){<br />            event.cancelBubble = true<br />            event.returnValue = false;<br />            return false;<br />      }<br />}<br /><br />//禁右键<br />document.oncontextmenu = nocontextmenu;  // for IE5+<br />document.onmousedown = norightclick;  // for all others<br />//--&gt;<br />&lt;/script&gt;</span></span></p><p><span style="BACKGROUND-COLOR: #ffffff"><span style="COLOR: #000000">&lt;body onselectstart="return false"; onpaste="return false";&gt; </span></span><br /><br /><br />在JSP标准的语法中，如果pageEncoding属性存在，那么JSP页面的字符编码方式就由pageEncoding决定，否则就由contentType属性中的charset决定，如果charset也不存在，JSP页面的字符编码方式就采用默认的ISO-8859-1。 <br /><br />//添加到收藏夹   <br />function AddToFavorite()   <br />{   <br />    if (document.all){   <br />       window.external.addFavorite(document.URL,document.title);   <br />    }else if (window.sidebar){   <br />       window.sidebar.addPanel(document.title, document.URL, "");   <br />    }   <br />}   <br />  <br />//设为首页   <br />function setHomepage(){   <br />    if (document.all){   <br />    document.body.style.behavior='url(#default#homepage)';   <br />    document.body.setHomePage(document.URL);   <br />  }else if (window.sidebar){   <br />        if(window.netscape){   <br />       try{    <br />          netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");    <br />       }catch (e){    <br />                    alert( "该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" );    <br />       }   <br />        }    <br />    var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);   <br />    prefs.setCharPref('browser.startup.homepage',document.URL);   <br />    }   <br />}</p><img src ="http://www.blogjava.net/kyleYang/aggbug/314922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-03-09 11:07 <a href="http://www.blogjava.net/kyleYang/archive/2010/03/09/314922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS注意事项</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/31/311360.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 30 Jan 2010 16:25:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/31/311360.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/311360.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/31/311360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/311360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/311360.html</trackback:ping><description><![CDATA[ JS中onpropertychange事件和onchange事件区别：<br />         当一个HTML元素的属性用js改变的时候，都能通过 onpropertychange来捕获。例如一个 &lt;input name="text1" id="text1" /&gt;对象的value属性被页面的脚本修改的时候，onchange无法捕获到，而onpropertychange却能够捕获。 <br />也就是说：onpropertychange事件在用键盘每改变一下文本框的值或用js改变其值便会触发一下，而onchange只有在用键盘改变其值，然后在失去焦点(onblur)后才触发，用js改变其值不能触发!onpropertychange和onchange都不管文本框中的实际值有没有变，只要有改的相应操作就可能触发。有时当上面两时间都不能满足需求时，可以考虑只用onblur。<br />         IE下，当一个HTML元素的属性改变的时候，都能通过 onpropertychange来捕获。例如一个 &lt;input name="text1" id="text1" /&gt;对象的value属性被页面的脚本修改的时候，onchange无法捕获到，而onpropertychange却能够捕获。<br />也就是说：onpropertychange能及时捕获属性值的变化，而onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件！<span style="COLOR: red">onpropertychange事件只能在IE下使用</span>。<img src ="http://www.blogjava.net/kyleYang/aggbug/311360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-31 00:25 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/31/311360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript常用例子</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/31/311358.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 30 Jan 2010 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/31/311358.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/311358.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/31/311358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/311358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/311358.html</trackback:ping><description><![CDATA[
		<strong>1.取消按钮按下时的虚线框 <br /></strong>　　在input里添加属性值 hideFocus 或者 HideFocus=true <br /><strong>2.只读文本框内容</strong><br />      在input里添加属性值 readonly <br /><strong>3.防止退后清空的TEXT文档(可把style内容做做为类引用)</strong><br />　　&lt;INPUT style=behavior:url(#default#savehistory); type=text id=oPersistInput&gt;<br /><strong>4.ENTER键可以让光标移到下一个输入框</strong><br />　　&lt;input onkeydown="if(event.keyCode==13) event.keyCode=9" &gt;<br /><strong>5.只能为中文(有闪动)</strong><br />　　&lt;input onkeyup="value=value.replace(/[ -~]/g,'')"<br />         onkeydown="if(event.keyCode==13) event.keyCode=9"&gt;<br /><strong>6.只能为数字(有闪动)</strong><br />　　&lt;input onkeyup="value=value.replace(/[^\d]/g,'')<br />         "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace<br />         (/[^\d]/g,''))"&gt;<br /><strong>7.只能为数字(无闪动)</strong><br />　　&lt;input style="ime-mode:disabled"<br />         onkeydown="if(event.keyCode==13) event.keyCode=9" onKeyPress="if ((event.keyCode&lt;48<br />         event.keyCode&gt;57))  event.returnValue=false"&gt;<br /><strong>8.只能输入英文和数字(有闪动)</strong><br />　　&lt;input onkeyup="value=value.replace(/[\W]/g,'')"<br />         onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(<br />         /[^\d]/g,''))"&gt;<br /><strong>9.屏蔽输入法</strong><br />　　&lt;input type="text" name="url" style="ime-mode:disabled"<br />         onkeydown="if(event.keyCode==13)event.keyCode=9"&gt; <br /><strong>10. 只能输入 数字，小数点，减号（-） 字符(无闪动)</strong><br />　　&lt;input onKeyPress="if (event.keyCode!=46 &amp;&amp; event.keyCode!=45 &amp;&amp;<br />         (event.keyCode&lt;48 event.keyCode&gt;57))  event.returnValue=false"&gt; <br /><strong>11. 只能输入两位小数，三位小数(有闪动)</strong><br />　　&lt;input maxlength=9<br />         onkeyup="if(value.match(/^\d{3}$$/)) value=value.replace(value,parseInt(value/10))<br />         ;value=value.replace(/\.\d*\./g,'.')" onKeyPress="if((event.keyCode&lt;48<br />         event.keyCode&gt;57) &amp;&amp; event.keyCode!=46 &amp;&amp; event.keyCode!=45 value.match(/^\d{3}$$/)<br />         /\.\d{3}$$/.test(value)) {event.returnValue=false}" id=text_kfxe name=text_kfxe&gt; <br /><strong>12.只能输入小数</strong><br />      &lt;input onpaste="return false" id="amount" style="IME-MODE: disabled; WIDTH: 60px; " onpropertychange="if(isNaN(value)) value=value.substring (0,value.length-1);" maxlength="5" size="14" name="amount" /&gt;<br /><strong>13.只能输入整数</strong><br />      &lt;input id="amount" style="IME-MODE: disabled; WIDTH: 60px; " onkeyup="this.value=this.value.replace(/\D/g,'')"  onafterpaste="this.value=this.value.replace(/\D/g,'')" maxlength="5" size="14" name="amount" type="text" /&gt; <img src ="http://www.blogjava.net/kyleYang/aggbug/311358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-31 00:19 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/31/311358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript定义二维数组的方法</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/22/310524.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 22 Jan 2010 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/22/310524.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/310524.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/22/310524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/310524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/310524.html</trackback:ping><description><![CDATA[
		<p>第一种办法就是用一维数组来模拟二维数组.感觉这样不是很好,有点麻烦,而且容易出错</p>
		<p>第二种办法:将一维数组的分项又定义为一个一维数组. 这种办法看起来似乎不错,主要实现方法如下:<br /><a href="http://www.busfly.cn/" target="_blank" tip="巴士飞扬技术博客,关注J2EE,Java开发思想,开发模式"><font color="#095c83">java</font></a>script定义二维数组的方法 <br /><a href="http://www.busfly.cn/" target="_blank" tip="巴士飞扬技术博客,关注J2EE,Java开发思想,开发模式"><font color="#095c83">java</font></a>script本身只支持一维数组， <br />有时非要用到二维数组的时候， <br />可以将一维数组的分项又定义为一个数组， <br />二维数组就是用数组构成的数组 <br />Var aa=new Array(); //定义一维数组 <br />for(i=1;i&lt;=10;i++) <br />{ <br />    aa[i]=new Array(); //将每一个子元素又定义为数组 <br />    for(n=0;n&lt;=10;n++) <br />    { <br />        aa[i][n]=i+n; //此时aa[i][n]可以看作是一个二级数组 <br />    } <br />}</p>
		<link href="http://www.busfly.cn/PLUGIN/Rating/rating.css" type="text/css" rel="stylesheet" />
<img src ="http://www.blogjava.net/kyleYang/aggbug/310524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-22 15:05 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/22/310524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Math对象应用详解</title><link>http://www.blogjava.net/kyleYang/archive/2010/01/22/310523.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Fri, 22 Jan 2010 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2010/01/22/310523.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/310523.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2010/01/22/310523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/310523.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/310523.html</trackback:ping><description><![CDATA[
		<p>JavaScript中的Math对象提供了大量的算术运算功能和数值操作方法。</p>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">JavaScript中的Math对象的与众不同之处在于，它是一个全局对象。在使用Math对象之前，既不需要将一个变量声明为Math对象，也不需要定义一个新的Math对象，JavaScript将自动地创建好Math对象，我们只须直接使用它即可。这使得Math对象使用起来很容易。</p>
		<p class="MsoNormal" style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21.1pt">Math对象的属性中包含一些经常使用的数学常量，如PI属性(即圆周率近似值3.141592653589793)。通常情况下，要访问这些属性，只须在Math之后加上一个点号(.)，然后写出要访问的属性名。例如，要计算一个圆的面积，可以使用如下代码：</p>
		<p class="2">var radius = prompt("Give the radius of the circle", "");</p>
		<p class="2">var area = (Math.PI)*radius*radius;</p>
		<p class="2" style="MARGIN-BOTTOM: 7.8pt">document.write("The area is " + area);</p>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">除加(+)、减(–)、乘(*)、除(/) 4个标准算术运算外，Math对象还包含一些复杂的数学方法，用于完成算术运算无法实现的复杂计算，例如cos()方法用于计算弧度参数的余弦函数。下面将介绍一些常见的数学方法。</p>
		<h4>1．abs()方法</h4>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">abs()方法返回所传入参数的绝对值。实际上，绝对值就是一个数去掉正负号之后的数值。例如，–1的绝对值是1，–4的绝对值是4等。对于正数，其绝对值就是该正数本身，例如，1的绝对值就是1。</p>
		<p class="MsoNormal" style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21.1pt">例如：下面的代码对–101取绝对值，并把结果输出在页面上：</p>
		<p class="2">var myNumber = -101;</p>
		<p class="2">document.write(Math.abs(myNumber));</p>
		<h4>2．ceil()方法</h4>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">ceil()方法用于向上取整，它把一个数值向上舍入到最接近的最小整数，即对于Math.ceil(n)方法，它将返回大于或等于n的最小整数。例如，10.01向上取整后为11，–9.99向上取整后为–9(这是因为对于负数，–9大于–10)。ceil()方法只有一个参数，即需要向上取整的数值。</p>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">ceil()方法的使用与第2章中介绍过的parseInt()方法是不同的。parseInt()方法只是简单地截断小数点之后的所有数字，把整数部分保留下来。而ceil(n)方法将向上取整，返回大于或等于n的最小整数。</p>
		<p class="MsoNormal" style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21.1pt">例如，下面的代码将在页面上输出两行信息，第一行为ceil()方法对101.01向上取整的结果102，第二行为parseInt()方法取整的结果101:</p>
		<p class="2">var myNumber = 101.01;</p>
		<p class="2">document.write(Math.ceil(myNumber) + "&lt;BR&gt;");</p>
		<p class="2">document.write(parseInt(myNumber));</p>
		<h4>3．floor()方法</h4>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">与ceil()方法类似，floor()方法也用于对一个数字进行取整，所不同的是，floor()方法用于向下取整，它把一个数值向下舍入到最接近的最大整数，即对于Math.floor(n)方法，它将返回小于或等于n的最大整数。例如，Math.floor(10.01)将返回10，而Math.floor(–9.99)将返回–10。</p>
		<h4>4．round()方法</h4>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">round()方法用于对一个数值进行四舍五入，即当一个数小数部分大于等于0.5时，则向上舍入，小于等于0.5时则向下舍入。</p>
		<p class="MsoNormal" style="MARGIN-BOTTOM: 7.8pt; TEXT-INDENT: 21.1pt">例如，对于如下代码：</p>
		<p class="2">var myNumber = 44.5;</p>
		<p class="2">document.write(Math.round(myNumber) + "&lt;BR&gt;");</p>
		<p class="2">myNumber = 44.49;</p>
		<p class="2" style="MARGIN-BOTTOM: 7.8pt">document.write(Math.round(myNumber));</p>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">对于44.5将四舍五入为45，而对于44.49则四舍五入为44。</p>
		<h4>5．关于取整方法的小结</h4>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">正如上面所述，ceil()方法、 floor()方法和round()方法都可以进行取整操作。但各个方法的取整操作是不同的。对于floor(n)方法，它返回小于或等于n的最大整数；对于ceil(n)方法，它返回大于或等于n的最小整数；而round(n)方法将对n进行四舍五入。这几个方法可能容易混淆，表4-3格则用实例进行了说明：它显示了一列数值，以及将这些数值作为参数分别传入parseInt()函数、ceil()方法、floor()方法和round()方法时的返回值。</p>
		<p class="af2" style="MARGIN-TOP: 7.8pt">表  4-3</p>
		<p>
		</p>
		<table class="MsoNormalTable" style="MARGIN-LEFT: 5.4pt; BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none" cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" width="106">
										<p class="a8">参    数</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="113">
										<p class="a8">parseInt()</p>
										<p class="a8">方法的返回值</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="112">
										<p class="a8">ceil()</p>
										<p class="a8">方法的返回值</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="112">
										<p class="a8">floor()</p>
										<p class="a8">方法的返回值</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a8">round()</p>
										<p class="a8">方法的返回值</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10.25</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">11</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10.75</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">11</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">11</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10.5</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">11</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">10</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">11</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10.25</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–11</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10.75</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–11</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–11</p>
								</td>
						</tr>
						<tr>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 79.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="106">
										<p class="a9" style="MARGIN: 0cm 26.35pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10.5</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 85.1pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="113">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 83.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 84.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="112">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–11</p>
								</td>
								<td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 78.05pt; BORDER-TOP-STYLE: none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="104">
										<p class="a9" style="MARGIN: 0cm 31.6pt 0pt 10.55pt; TEXT-ALIGN: right" align="right">–10</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="TEXT-INDENT: 21.1pt">注意，与表中其他的方法不同的是：parseInt()函数是一个JavaScript内置对象，而不是Math对象的一个方法。</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/310523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2010-01-22 15:01 <a href="http://www.blogjava.net/kyleYang/archive/2010/01/22/310523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSS浮动属性Float详解</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/16/306233.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Wed, 16 Dec 2009 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/16/306233.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/306233.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/16/306233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/306233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/306233.html</trackback:ping><description><![CDATA[
		<h1 class="post-title">
				<a title="CSS浮动属性Float详解" href="http://paranimage.com/css-float-attribute/" rel="bookmark">CSS浮动属性Float详解</a>
				<script type="text/javascript">
						<!--
google_ad_client = "pub-4790028573395106";
/* 336x280, ������ 09-8-18 */
google_ad_slot = "4512860232";
google_ad_width = 336;
google_ad_height = 280;
//-->
				</script>
				<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
				</script>
				<script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js">
				</script>
				<script src="http://googleads.g.doubleclick.net/pagead/test_domain.js">
				</script>
				<script src="http://pagead2.googlesyndication.com/pagead/render_ads.js">
				</script>
				<script><![CDATA[oogle_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);]]&gt;</script>
		</h1>
		<strong>
		</strong>
		<h2 class="entry">什么是<a href="http://paranimage.com/category/dede/css/">CSS</a> Float？</h2>
		<p class="entry">
				<strong>float 是 css 的定位属性</strong>。在传统的印刷布局中，文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”。在网页设计中，应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样。浮动的元素仍然是网页流的一部分。这与使用绝对 定位的页面元素相比是一个明显的不同。绝对定位的页面元素被从网页流里面移除了，就像印刷布局里面的文本框被设置为无视页面环绕一样。绝对定位的元素不会 影响其它元素，其它元素也不会影响它，无论它是否和其它元素挨着。</p>
		<p class="entry">像这样在一个元素上用CSS设置浮动：</p>
		<div class="entry">
				<pre>
						<code class="css">#sidebar { float: right; }</code>
				</pre>
		</div>
		<p class="entry">fload属性有四个可用的值：Left 和Right 分别浮动元素到各自的方向，None (默认的) 使元素不浮动，Inherit 将会从父级元素获取float值。</p>
		<h2 class="entry">Float的用处</h2>
		<p class="entry">除了简单的在图片周围包围文字，浮动可用于创建全部网页布局。</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="web layout CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/web-layout.png" />
		</p>
		<p class="entry">Float对小型的布局同样有用。例如页面中的这个小区域。如果我们在我们的小头像图片上使用Float，当调整图片大小的时候，盒子里面的文字也将自动调整位置：</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="reflow example 1 CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/reflow-example-1.png" />
		</p>
		<p class="entry">同样的布局可以通过在外容器使用相对定位，然后在头像上使用绝对定位来实现。这种方式中，文本不会受头像图片大小的影响，不会随头像图片的大小而有相应变化。</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="reflow example 2 CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/reflow-example-2.png" />
		</p>
		<h2 class="entry">清除Float</h2>
		<p class="entry">清除(clear)是浮动(float)的相关属性.一个设置了清除Float的元素不会如浮动所设置的一样，向上移动到Float元素的边界，而是会忽视浮动向下移动。如下，一图顶千言。<span id="more-11034"></span></p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="uncleardfooter" src="http://paranimage.com/images/css-float/unclearedfooter.png" />
		</p>
		<p class="entry">上例中，侧栏向右浮动，并且短于主内容区域。页脚(footer)于是按浮动所要求的向上跳到了可能的空间。要解决这个问题，可以在页脚(footer)上清除浮动，以使页脚(footer)待在浮动元素的下面。</p>
		<div class="entry">
				<pre>
						<code class="css">#footer { clear: both; }</code>
				</pre>
		</div>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="cleardfooter" src="http://paranimage.com/images/css-float/clearedfooter.png" />
		</p>
		<p class="entry">清除(clear)也有4个可能值。最常用的是 both，清楚左右两边的浮动。left 和 right 只能清楚一个方向的浮动。none 是默认值，只在需要移除已指定的清除值时用到。inherit 应该时第五个值，不过很奇怪的是 IE 不支持(这个不奇怪吧，IE 从来都这么特立独行吧 －糖伴西红柿注)。只清除左边或右边的浮动，实际中很少见，不过绝对有他们的用处。</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="directionalclearing CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/directionalclearing.png" />
		</p>
		<h2 class="entry">伟大的塌陷</h2>
		<p class="entry">使用浮动(float)的一个比较疑惑的事情是他们怎么影响包含他们的父元素的。如果父元素只包含浮动元素，那么它的高度就会塌缩为零。如果父元素不包含任何的可见背景，这个问题会很难被注意到，但是这是一个很重要的问题。</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="collapse CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/collapse.png" />
		</p>
		<p class="entry">塌陷的直观对立面更不好，看看下面的情况：</p>
		<p class="entry">
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="whywecollapse CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/whywecollapse.png" />
		</p>
		<p class="entry">当上面的块级元素自动扩展以适应浮动元素时，段落间的文本流中会出现非自然的空白换行，而且没有有效的方法来修正这个问题。对于这种情况，设计师的抱怨会更甚于对塌陷的抱怨（没理解，不是设计完成之后才会进行页面编码吗？－ 糖伴西红柿）。</p>
		<p class="entry">为了防止怪异的布局和跨浏览器的问题，塌陷问题几乎总是被要处理的。我们在容器中的浮动元素之后，容器结束之前来清除浮动。</p>
		<h2 class="entry">清除浮动的技术</h2>
		<p class="entry">如果你很明确的知道接下来的元素会是什么，可以使用 clear:both; 来清除浮动。这个方法很不错，它不需要 hack，不添加额外的元素也使得它有良好的语义性。当然事情并不是都可以这样解决的，工具箱中还是需要另外几个清除浮动的工具。</p>
		<div class="entry">
				<ul>
						<li>
								<strong>空div方法</strong>从字面来看，是一个空的 div。<br />。有时可能会用<br />或者一些其他元素，但是 div 是最常用的，因为它没有浏览器默认样式；没有特殊功能，而且一般不会被 css 样式化。这个方法因为只是为了表现，对页面没有上下文涵义而被纯语义论者嘲笑。诚然，从严格的角度来说他们是对的，但是这个方法有效而且没有任何伤害。 
</li>
						<li>
								<strong>overflow 方法</strong>在父元素上设置 overflow 这个 css 属性。如果父元素的这个属性设置为 auto 或者 hidden，父元素就会扩展以包含浮动。这个方法有着较好的语义性，因为他不需要额外元素。但是，如果需要增加一个新的 div 来使用这个方法，其实就和空 div 方法一样没有语义了。而且要记住，overflow 属性不是为了清除浮动而定义的。要小心不要覆盖住内容或者触发了不需要的滚动条。 
</li>
						<li>
								<strong>简单清除方法</strong>使用了一个聪明的 css 伪选择符(:after)来清除浮动。比起在父元素上设置 overflow，只需要给它增加一个额外的类似于”clearfix”的类。这个类使用如下 css: <pre><code class="css">			.clearfix:after {
   				content: ".";
   				visibility: hidden;
   				display: block;
   				height: 0;
   				clear: both;
			}</code></pre><p>这会在清除浮动的父元素之后应用一点看不见的内容。这不是<a href="http://www.positioniseverything.net/easyclearing.html">全部内容</a>，还需要一些额外的代码来适应那些老旧的浏览器。 </p></li>
				</ul>
		</div>
		<p>不同的情况需要不同的浮动清除方法。以一个具有不同样式块的网格为例。</p>
		<p>
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="grid blocks CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/grid-blocks.png" />
		</p>
		<p>为了从视觉上较好的把相似的块联系起来，需要在必要的地方开启新行，这里是颜色改变的地方。如果每个颜色组都有一个父元素的话，我们可以使用 overflow 或者 简单清除方法。或者，在每组之间用一个空div方法。额外的 div 之前并不存在，可以自己试试来看看哪个方法好。</p>
		<p>
				<img class="aligncenter" title="CSS浮动属性Float详解" alt="grid blocks cleared CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/grid-blocks-cleared.png" />
		</p>
		<h2>浮动的问题</h2>
		<p>浮动因脆弱而饱受诟病。大多数的脆弱性来自于 IE6 及其一系列的浮动相关 bug。因为越来越多的设计师不再支持 IE6 了，你也可以不关注它了。不过对于那些要关注的人来说，这里有些大概。</p>
		<ul>
				<li>
						<strong>推倒</strong>是浮动元素内的元素（大多是图片）比浮动元素本身宽造成的现象。大多数的浏览器会在浮动之外渲染图片，但是不会有伸出来的部分影响其他布局。IE 会扩展浮动来包含图片，精彩大幅度地影响布局。一个普遍的例子是突破伸出主内容之外把侧栏推到下面。<img class="aligncenter" title="CSS浮动属性Float详解" alt="pushdown2 CSS浮动属性Float详解" src="http://paranimage.com/images/css-float/pushdown2.png" /></li>
				<li>
						<strong>快速修正</strong>：确保不是图片造成这种情况，使用 overflow:hidden 来切除多余的部分。 
</li>
				<li>
						<strong>双倍边距bug</strong>处理 IE6 时，另一个需要记住的事情是，如果在和浮动方向相同的方向上设置外边距(margin)，会引发<a href="http://www.cssnewbie.com/double-margin-float-bug/">双倍边距</a>。快速修正：给浮动设置 display:inline; 而且不用担心，它依然是块级元素。 
</li>
				<li>
						<strong>3像素间距</strong>是指挨着浮动元素的文本会神奇的被踢出去3像素，好像浮动元素的周围有一个奇怪的力场一样。快速修正：在受影响的文本上设置宽度或高度。 
</li>
				<li>IE7 中，<strong>底边距 bug</strong>是当浮动父元素有浮动子元素时，这些子元素的底边距会被父元素忽略掉。快速修正：用父元素的底内补白(padding)代替。 </li>
		</ul>
		<p>摘自：<a href="http://paranimage.com/css-float-attribute/">http://paranimage.com/css-float-attribute/</a><br /><br /></p>
		<p>CSS中 clear:both;可以终结在出现他之前的浮动 CSS中 clear:both;可以终结在出现他之前的浮动<br /></p>
		<p>例如</p>
		<p>&lt;style&gt;<br />.demodiv{float:left;width:100px;height:50px;background:red;margin:5px;}<br />.d{clear:both}<br />&lt;/style&gt;<br />&lt;div class="demodiv"&gt;1&lt;/div&gt;<br />&lt;div class="demodiv"&gt;2&lt;/div&gt;<br />&lt;div class="d"&gt;&lt;/div&gt;<br />&lt;div class="demodiv"&gt;3&lt;/div&gt;<br />&lt;div class="demodiv"&gt;4&lt;/div&gt;</p>
<img src ="http://www.blogjava.net/kyleYang/aggbug/306233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-16 23:28 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/16/306233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript面向对象编程（2）-- 类的定义 </title><link>http://www.blogjava.net/kyleYang/archive/2009/12/08/305174.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 08 Dec 2009 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/08/305174.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/305174.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/08/305174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/305174.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/305174.html</trackback:ping><description><![CDATA[最近这一段时间事情太多了，没有时间再继续写，幸好这两天有点小闲，先小写一下JavaScript中面向对象一中推荐的方法。本文承接上一篇<a href="/kyleYang/archive/2009/12/08/305173.html"><font color="#1d58d1">JavaScript面向对象编程（1） -- 基础</font></a>。<br /><br />    上篇说过，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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_250_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_250_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_250_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_250_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_250_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_250_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_250_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_250_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_250_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_250_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><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">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />     <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">properties</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> id;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />     <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">method</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_183_248_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_183_248_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_183_248_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_183_248_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_183_248_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_183_248_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_183_248_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_183_248_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_183_248_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_183_248_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br />  </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span></div><br />    function的定义实际上相当于类的构造函数，最后两句是创建这个类的实例。先分析第一句：<span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span> 当用new创建类的实例时，解释器首先会创建一个空的对象。然后运行这个myClass函数，并将this指针指向这个类的实例。当碰到<span id="Codehighlighter1_19_250_Open_Text"><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> id;</span></span>和<span id="Codehighlighter1_19_250_Open_Text"><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;</span></span>及<span id="Codehighlighter1_19_250_Open_Text"><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.showMessage </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(){...}</span></span>时，便会创建这两个属性，和这个方法，并把变量id，name的值一级函数的定义赋给这两个属性及这个函数对象（shwoMessage）。这个过程相当于初始化这个对象，类似于C# 中的构造函数。最后new返回这个对象。再看第二句：<span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass(); 执行过程与上一句代码相同，即创建一个空对象，然后执行myClass这个函数，定义两个属性和一个方法。</span><br />    <br />    从上面的分析中可以看到，上面这种实现类的方式，即在函数的定义中定义类的属性方法。存在着弊端。如果需要创建两个或更多这个类的实例时，上文是两个，这些属性会被重复的创建多次。<br />    <br />    那么如何避免这种情况呢？上一篇中也曾提到过用prototype。prototype和它的名字一样是一个原型，每一个function都有一个子对象prototype，它其实表示这个function对象的成员的集合，由于这里我们使用function实现类的，所以可以说prototype其实就是便是类的成员的集合。prototype定义的属性和方法执行在函数的构造体执行之前，所以当new一个对象之前，其实prototype的成员已经执行过了。先看一个例子：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_33_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_33_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_33_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_33_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_33_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_33_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_33_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_33_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_33_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_33_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造函数</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_56_189_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_189_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_56_189_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_189_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_56_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_56_189_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_56_189_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_56_189_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_56_189_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_56_189_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    ID: </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    showMessage: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_122_187_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_122_187_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_122_187_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_122_187_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_122_187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_122_187_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_122_187_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_122_187_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_122_187_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_122_187_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span></div><br />    类的结构还是和前面的例子相同，只不过这里是利用了prototype来实现。还是先看最后两句，前面说过，prototype是执行在函数构造体之前，即执行到<span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span>之前，这个类已经有了ID，Name属性和showMessage方法。执行者一句时执行过程如下，注意和前一个例子比较：首先还是创建一个空的对象，并把this指针指向这个对象。然后将函数的prototype对象的所有成员都赋给这个对象（注意没有再创建这些成员）。然后执行函数体。最后new返回这个对象。执行下一句时：同样执行此过程，不会重复创建这些成员。<br />    <br />    上面的代码还只是一个例子，在实际的项目中，可能出现的是类中有大量的成员，同时可能需要创建大量的实例。这是prototype就会显示其优越性了。另外上面的代码中使用了大括号语法定义了prototype的成员，这样看起来代码更清晰。这是一种比较推荐的类的设计模式。当然在众多的项目中，可能还会发现更好的模式，我们也希望能有更优化的JavaScript的编程模式不断推陈出新，也希望随着时间的推移，各主流浏览器也对JavaScript的解析都标准，统一。<br /><br />    上面说过prototype定义的成员是发生在构造体之前，可以证明一下，在上面的例子中，构造体是空的，在构造函数中加入一句<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'">alert(</span><span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'">this</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'">.Name);</span>，当执行到<span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'">var</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"> obj1 = </span><span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'">new</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'"> myClass();</span>时，会看到弹出对话框，显示正确的属性值。<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img id="Codehighlighter1_19_22_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_22_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_22_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_22_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_22_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_22_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_22_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_22_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> subClass()</span><span id="Codehighlighter1_19_22_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_22_Open_Text"><span style="COLOR: #000000">{ }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />subClass.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_44_63_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_44_63_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_44_63_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_44_63_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_44_63_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_44_63_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_44_63_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_44_63_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_44_63_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_44_63_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sub</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_84_98_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_84_98_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_84_98_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_84_98_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_84_98_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_84_98_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_84_98_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_84_98_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_84_98_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_84_98_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">构造函数</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_121_318_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_121_318_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_121_318_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_121_318_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_121_318_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_121_318_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_121_318_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_121_318_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_121_318_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_121_318_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    ID: </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    SubObj: </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> subClass(),<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    showMessage: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_215_316_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_215_316_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_215_316_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_215_316_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_215_316_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_215_316_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_215_316_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_215_316_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_215_316_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_215_316_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</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">SubObj.Name:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.SubObj.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.SubObj.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">XXX</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.showMessage();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj2.showMessage();</span></div>    这里在myClass中定义了一个引用类型，其类型是我们自定义的一个subClass类，这个子类中有一个Name属性。由于prototype对象是共享的，按照我们上面的分析：在执行<span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span>时，会把myClass的prototype中的成员复制给这个obj1实例。但这里SubObj是一个引用类型，在执行到<span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span> <span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span>时，prototype中的ID，Name成员会复制到obj2中，但SubObj这个属性不会复制过去，而是引用了prototype中的SubObj，所以因为上一句修改了obj1.Subobj.Name的值，所以在用new生成obj2实例时，引用到了修改后的值。<br /><br />    所以借用prototype定义类时，依然需要将属性定义在构造体中，而将方法定义在该构造体的原型上。如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass(id, name)<br /><img id="Codehighlighter1_27_70_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_70_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_27_70_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_70_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_70_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_70_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_27_70_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_70_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_27_70_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_27_70_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> id;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_93_262_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_93_262_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_93_262_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_93_262_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_93_262_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_93_262_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_93_262_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_93_262_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_93_262_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_93_262_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    showMessage: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_127_192_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_192_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_127_192_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_192_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_127_192_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_127_192_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_127_192_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_127_192_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_127_192_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_127_192_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    showMessage2: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_227_260_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_227_260_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_227_260_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_227_260_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_227_260_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_227_260_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_227_260_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_227_260_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_227_260_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_227_260_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Method2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> <br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.showMessage();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.Name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">John</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.showMessage();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Amanda</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj2.showMessage();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div><br />     关于私有成员，共有成员以及静态成员，类的继承，抽象类，虚方法，类的反射等实现方法，以后还会坚持写下去。不过我觉得需要说一下的是，我打算写的是JavaScript面向对象的基础实现，如果需要深入的学习建议参考李战老哥的“甘露模型”。<br /><img src ="http://www.blogjava.net/kyleYang/aggbug/305174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-08 15:40 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/08/305174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript面向对象编程（1）</title><link>http://www.blogjava.net/kyleYang/archive/2009/12/08/305173.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 08 Dec 2009 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/12/08/305173.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/305173.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/12/08/305173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/305173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/305173.html</trackback:ping><description><![CDATA[自从有了Ajax这个概念，JavaScript作为Ajax的利器，其作用一路飙升。JavaScript最基本的使用，以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。<img alt="" src="http://www.cnblogs.com/Emoticons/msn/wink_smile.gif" /><br /><br />    1. 用JavaScript实现类<br />       JavaScritpt没有专门的机制实现类，这里是借助它的函数允许嵌套的机制来实现类的。一个函数可以包含变量，又可以包含其它函数，这样，变量可以作为属性，内部的函数就可以作为成员方法了。因此外层函数本身就可以作为一个类了。如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_36_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_36_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_36_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_36_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_36_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_36_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_36_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_36_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_36_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_36_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此处相当于构造函数</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span></div>这里 myClass就是一个类。其实可以把它看成类的构造函数。至于非构造函数的部分，以后会详细描述。<br /><br />    2. 如何获得一个类的实例<br />      实现了类就应该可以获得类的实例，JavaScript提供了一个方法可以获得对象实例。即 new操作符。其实JavaScript中，类和函数是同一个概念，当用new操作一个函数时就返回一个对象。如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span></div><br />    3. 对象的成员的引用<br />       在JavaScript中引用一个类的属性或方法的方法有以下三种。<br />       1&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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">对象名.属性名;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />对象名.方法名;</span></div><br />      2&gt;  方括号引用<br />           JavaScript中允许用方括号引用对象的成员。如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><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 alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />对象名[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">方法名</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">];</span></div>            这里方括号内是代表属性或方法名的字符串，不一定是字符串常量。也可以使用变量。这样就可以使用变量传递属性或方法名。为编程带来了方便。在某些情况下，代码中不能确定要调用那个属性或方法时，就可以采用这种方式。否则，如果使用点号操作符，还需要使用条件判断来调用属性或方法。<br />       另外，使用方括号引用的属性和方法名还可以以数字开头，或者出现空格，而使用点号引用的属性和方法名则遵循标示符的规则。但一般不提倡使用非标示符的命名方法。<br /> <br />      3&gt;  使用eval函数<br />           如果不希望使用变量传递变量或方法名，又不想使用条件判断，那么eval函数是一个好的选择。eval接收一个字符串类型的参数，然后将这个字符串作为代码在上下文中执行，返回执行的结果。这里正是利用了eval的这一功能。如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">alert(eval(</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"> element.value));</span></div>         <br />     4. 对对象属性，方法的添加、修改和删除操作<br />         JavaScript中，在生成对象之后还可以为对象动态添加、修改和删除属性和方法，这与其它面向对象的语言是不同的。<br />        1&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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加属性</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj1.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加方法</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj1.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function<span style="COLOR: #000000">()</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_104_161_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_104_161_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_104_161_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_104_161_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_104_161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_104_161_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_104_161_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_104_161_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_104_161_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_104_161_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />      2&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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 修改属性</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj1.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Amanda</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 修改方法</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">obj1.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function<span style="COLOR: #000000">()</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_80_113_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_80_113_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_80_113_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_80_113_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_80_113_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_80_113_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_80_113_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_80_113_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_80_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_80_113_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>     <br />      3&gt;  删除属性与方法<br />            直接将要删除的属性或方法赋值为undefined即可：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">obj1.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> 1;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> undefined;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> undefined;</span></div><br />     5. 创建无类型对象。<br />        类似于C#3.0里的Anonymous Types，JavaScript 也可以创建无类型的对象。形式如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img id="Codehighlighter1_11_13_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_11_13_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_11_13_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_11_13_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_11_13_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_11_13_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_11_13_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_11_13_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_11_13_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_11_13_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_27_156_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_156_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_27_156_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_156_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_156_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_27_156_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_27_156_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_27_156_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_27_156_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_27_156_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    ID: </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    showMessage: </span><span style="COLOR: #0000ff">function<span style="COLOR: #000000">()</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_91_154_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_91_154_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_91_154_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_91_154_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_91_154_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_91_154_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_91_154_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_91_154_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_91_154_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_91_154_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}<br /></span></span></div>       这里定义了两个无类型的对象，obj1和obj2。其中obj1是一个空对象。obj2包括两个属性ID, Name和一个方法showMessage。每个属性和方法用逗号分割。属性(方法)名和其值之间用分号分割。<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> <br /><img id="Codehighlighter1_12_51_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_12_51_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_12_51_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_12_51_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_12_51_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_12_51_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_12_51_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_12_51_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_12_51_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_12_51_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> : </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br />      6. prototype<br />          每个函数对象都具有一个子对象prototype，因为函数也可以表示类，所以prototype表示一个类的成员的集合。当new 一个对象时，prototype对象的成员都会被实例化成对象的成员。先看一个例子：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_22_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_22_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_22_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_22_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_22_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_22_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_22_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_22_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_22_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_22_Open_Text"><span style="COLOR: #000000">{ }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_129_184_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_129_184_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_129_184_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_129_184_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_129_184_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_129_184_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_129_184_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_129_184_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_129_184_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_129_184_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />obj1.showMessage();</span></div>      使用prototype对象创建类有一个好处。如果将所有的成员直接写在类的声明中，如下：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_191_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_191_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_191_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_191_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_191_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_191_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_191_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_191_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_191_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_191_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加属性</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</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">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加方法</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function<span style="COLOR: #000000">()</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_124_189_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_124_189_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_124_189_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_124_189_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_124_189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_124_189_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_124_189_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_124_189_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_124_189_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_124_189_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span></div>        在上面的代码中，定义了一个类myClass，在类中直接定义了两个属性和一个方法。然后实例化了两个对象，这里的两个属性和一个方法，每创建一次myClass对象都会被创建一次，浪费了内存空间。而用prototype以后就可以解决这个问题，每new一个函数时，其prototype对象的成员都会自动赋给这个对象，当new多个对象时不会重复创建。<br />        由于prototype的初始化发生在函数体执行之前，用以下代码可以证明：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_107_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_107_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_107_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_107_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_107_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_107_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_107_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_107_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_107_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_107_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此处相当于构造函数</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.showMessage();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.Name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">johnson</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.showMessage </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img id="Codehighlighter1_187_244_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_187_244_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_187_244_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_187_244_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_187_244_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_187_244_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_187_244_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_187_244_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_187_244_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_187_244_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ID: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.ID </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, Name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Name);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>        执行以上代码可以发现当new这个类型的对象时，即弹出了对话框。<br />        最后只得一提的是，prototype有一个方法，在面向对象的设计中用得到。即：constructor属性，是对构造函数的调用，这里的构造函数即上文提到的类的声明里的代码。如：<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%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> myClass()<br /><img id="Codehighlighter1_19_75_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_75_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_19_75_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_75_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_75_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_19_75_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_19_75_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_19_75_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_75_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_19_75_Open_Text"><span style="COLOR: #000000">{<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此处相当于构造函数</span><span style="COLOR: #008000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is in constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />myClass.prototype.constructor();<br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> obj1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> myClass();</span></div>   执行以上代码你会发现对话框弹出了两次。由此可见，prototype可专门用于设计类的成员，实际上在JavaScript面向对象的设计中，很多时候都会用到prototype。<br /><img src ="http://www.blogjava.net/kyleYang/aggbug/305173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-12-08 15:39 <a href="http://www.blogjava.net/kyleYang/archive/2009/12/08/305173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS日期比较--续</title><link>http://www.blogjava.net/kyleYang/archive/2009/10/25/299638.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 24 Oct 2009 17:44:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/10/25/299638.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/299638.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/10/25/299638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/299638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/299638.html</trackback:ping><description><![CDATA[function ValidtorTime()<br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp; d1&nbsp;&nbsp; = new&nbsp; Date(document.getElementById('txbFromDate').value<font color="#ff0000">.replace(/\-/g, "\/"));</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp; d2&nbsp;&nbsp; = new&nbsp; Date(document.getElementById('txbToDate').value<font color="#ff0000">.replace(/\-/g, "\/"));</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(d1&gt;d2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("结束时间必须在开始时间之后!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
 <img src ="http://www.blogjava.net/kyleYang/aggbug/299638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-10-25 01:44 <a href="http://www.blogjava.net/kyleYang/archive/2009/10/25/299638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS日期比较</title><link>http://www.blogjava.net/kyleYang/archive/2009/10/25/299632.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sat, 24 Oct 2009 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/kyleYang/archive/2009/10/25/299632.html</guid><wfw:comment>http://www.blogjava.net/kyleYang/comments/299632.html</wfw:comment><comments>http://www.blogjava.net/kyleYang/archive/2009/10/25/299632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kyleYang/comments/commentRss/299632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kyleYang/services/trackbacks/299632.html</trackback:ping><description><![CDATA[function CompareDate(inputDate){<br />
&nbsp;&nbsp;&nbsp;&nbsp; var currentDate = new Date(); <br />
&nbsp;&nbsp;&nbsp;&nbsp; if(currentDate.getYear() &gt; inputDate.getYear())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(currentDate.getYear() &lt; inputDate.getYear())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if(currentDate.getMonth() &gt; inputDate.getMonth())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(currentDate.getMonth() &lt; inputDate.getMonth())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; if(currentDate.getDate() &gt; inputDate.getDate())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(currentDate.getDate() &lt; inputDate.getDate())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; function Compare() {<br />
&nbsp;&nbsp;&nbsp; var sday = document.getElementById("day").value.split('-');<br />
&nbsp;&nbsp;&nbsp;&nbsp; var inputDate = new Date(sday[0],sday[1]-1,sday[2]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(isNaN(inputDate)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("不是日期");<br />
&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; var result = CompareDate(inputDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(result &lt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(inputDate.toLocaleString() + "小于当前日期");<br />
&nbsp;&nbsp;&nbsp;&nbsp; else if(result &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(inputDate.toLocaleString() + "大于当前日期");<br />
&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(inputDate.toLocaleString() + "等于当前日期");<br />
&nbsp;&nbsp;&nbsp; }
  <img src ="http://www.blogjava.net/kyleYang/aggbug/299632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kyleYang/" target="_blank">飞熊</a> 2009-10-25 00:11 <a href="http://www.blogjava.net/kyleYang/archive/2009/10/25/299632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>