<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2chinesetwfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>未完待续</title>
	
	<link>http://ioio.name</link>
	<description>To Be Continued</description>
	<lastBuildDate>Fri, 25 May 2012 05:08:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/miss" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="miss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/</creativeCommons:license><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">miss</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/miss" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fmiss" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Object-Oriented JavaScript笔记(六)</title>
		<link>http://ioio.name/object-oriented-javascript-note-6.html</link>
		<comments>http://ioio.name/object-oriented-javascript-note-6.html#comments</comments>
		<pubDate>Fri, 25 May 2012 05:08:30 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2045</guid>
		<description><![CDATA[Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) Object-Oriented JavaScript笔记(三) Object-Oriented JavaScript笔记(四) Object-Oriented JavaScript笔记(五) 第七章 浏览器环境 文档对象模型(处理当前页面内容的)与浏览器对象模型(处理当前页面之外的) 参考资料： * The Mozilla DOM reference for Firefox information * Microsoft&#8217;s documentation for Internet Explorer * W3C&#8217; DOM specs BOM 提供一组对象访问浏览器(window)及计算机屏幕信息(window.screen) window对象相关属性 window.navigator 包含浏览器及其功能信息 navigator.userAgent 返回浏览器标识信息，开发者常用它区分浏览器以提供不同的实现代码 if &#40;navigator.userAgent.indexOf&#40;'MSIE'&#41; !== -1&#41; &#123; // this is IE &#125; else &#123; // [...]]]></description>
			<content:encoded><![CDATA[<p>Object-Oriented JavaScript 笔记<br />
<a href="http://ioio.name/object-oriented-javascript-note.html" target="_blank">Object-Oriented JavaScript笔记(一)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-2.html" target="_blank">Object-Oriented JavaScript笔记(二)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-3.html" target="_blank">Object-Oriented JavaScript笔记(三)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-4.html" target="_blank">Object-Oriented JavaScript笔记(四)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-5.html" target="_blank">Object-Oriented JavaScript笔记(五)</a></p>
<p><strong>第七章 浏览器环境</strong></p>
<p>文档对象模型(处理当前页面内容的)与浏览器对象模型(处理当前页面之外的)<br />
参考资料：</p>
<p>	* <a href="http://developer.mozilla.org/en/docs/Gecko_DOM_Reference" target="_blank">The Mozilla DOM reference for Firefox information</a><br />
	* <a href="http://msdn2.microsoft.om/en-us/library/ms533050(vs.85).aspx" target="_blank">Microsoft&#8217;s documentation for Internet Explorer</a><br />
	* <a href="http://www.w3.org/DOM/DOMTR" target="_blank">W3C&#8217; DOM specs</a></p>
<p>BOM<br />
提供一组对象访问浏览器(window)及计算机屏幕信息(window.screen)</p>
<p><strong>window对象相关属性</strong><br />
window.navigator 包含浏览器及其功能信息<br />
navigator.userAgent 返回浏览器标识信息，开发者常用它区分浏览器以提供不同的实现代码</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">userAgent</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'MSIE'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">// this is IE</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">// not IE</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>这并不能完整的细分到每一个浏览器，更好的办法是使用特性嗅探法</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> window.<span style="color: #660066;">addEventListener</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'function'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">// feature is supported, let's use it</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">// hmm, this feature is not supported, will have to</span>
     <span style="color: #006600; font-style: italic;">// think of another way</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>window.location 提供与当前页面url有关的信息，同时提供了三个方法reload(), assign() 和 replace().<br />
assign和replace功能很相似，区别是replace不在window.history中产生信息。</p>
<p>window.history允许你访问当前会话窗口的访问历史</p>
<p>window.frames保存一组当前页面的frames信息,无论是否存在frames，window.frames总是指向window对象（这说明它也是一个伪数组）<br />
每个frame中都包含一个独立的window对象，可以通过下面几种形式访问它<br />
>>> window.frames[0]<br />
>>> window.frames[0].window<br />
>>> frames[0].window<br />
>>> frames[0]</p>
<p>父页面可以访问子页面，子页面同样可以访问父页面，每个页面都有一个window.parent指向其父页面(不存在时指向自身)<br />
如果要访问顶层页面，window.top (不存在时指向自身)</p>
<p>如果一个frame有name属性，也可以通过name访问它window.frames['myframe']</p>
<p>window.screen提供屏幕与颜色深度信息</p>
<p>window.open()/window.close()/window.moveTo()/window.resizeTo()/window.alert()/window.prompt()/window.confirm()这些别用了。</p>
<p>注意：alert()并不是ECMAScript中定义的方法。</p>
<p>window.setTimeout(), window.setInterval()延时执行和重复执行<br />
虽然第一个参数可以传字符串setTimeout(&#8216;foo&#8217;,2000)但是还是别传字符串，传函数引用更妥当setTimeout(foo,2000)</p>
<p>window.document提供当前页面文档对象模型相关的信息(DOM)</p>
<p>nodeType为1的节点(element nodes)，nodeName和tagName都是节点的标签名称。</p>
<p>innerHTML并不是标准中存在的，但所有的浏览器都支持它。</p>
<p>document.getElementsByTagName(&#8216;*&#8217;)<br />
早期的IE浏览器并不支持星号作为tag名称传入，不过可以使用document.all获得所有元素。<br />
IE7开始支持*号作为标签名，但它会返回所有节点，而不仅仅只是元素类节点。</p>
<p><strong>遍历dom</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> walkDOM<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000066; font-weight: bold;">do</span> <span style="color: #009900;">&#123;</span>
   console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>n.<span style="color: #660066;">hasChildNodes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     walkDOM<span style="color: #009900;">&#40;</span>n.<span style="color: #660066;">firstChild</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>n <span style="color: #339933;">=</span> n.<span style="color: #660066;">nextSibling</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span>
walkDOM<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">body</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>CSS中的短横线在JavaScript并不是合法的名字，所以margin-left在在js中是以el.style.marginLeft的形式访问。<br />
可以直接修改节点的属性,如<br />
el.id = &#8216;sidebar&#8217;<br />
由于class在JavaScript中是保留字，修改class属性则使用el.className</p>
<p><strong>HTML 私有对象</strong><br />
document.images 等效于 <code>document.getElementsByTagName('img')</code></p>
<p>document.applets 等效于 <code>document.getElementsByTagName ('applets')</code></p>
<p>document.links 所有的</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;…&quot;</span><span style="color: #339933;">&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span></pre></div></div>

<p>document.anchors 所有的</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a <span style="color: #000066;">name</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;…&quot;</span><span style="color: #339933;">&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span></pre></div></div>

<p>document.forms</p>
<p><strong>非核心对象</strong><br />
document.cookie<br />
document.title<br />
document.referrer<br />
document.domain<br />
document.location</p>
<p>注意，改变document.title并不等效于访问<code>document.getElementsByTagName(' title')[0]</code>，它只是更改浏览器窗口上的显示。</p>
<p>document.referrer的值等同于http头里的Referer(由于历史原因，这是个拼写错的词)</p>
<p>document.domain可以从小域改称大域(www.yahoo.com -> yahoo.com)，但不能从大域改称小域(yahoo.com -> www.yahoo.com)，常用于解决跨域问题。</p>
<p>window.location === document.location</p>
<p><strong>事件</strong><br />
在2级DOM事件模型中，事件传播分三个阶段进行，即捕获阶段（capturing）、目标阶段和冒泡阶段（bubbling）。</p>
<p>IE 只支持冒泡<br />
Netscape 只支持捕获</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> mypara <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'my-div'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
mypara.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Boo!'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>第三个参数决定是否使用捕获，由于兼容性原因，建议传false，在实际的使用中只使用冒泡。</p>
<p>可以使用e.stopPropagation();放弃冒泡。<br />
事件代理(event delegation)的应用</p>
<p>IE中还是可能使用事件捕获的 setCapture() / releaseCapture()，但它只支持鼠标事件，其它事件（如键盘事件）则不支持。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'clicked window'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
window.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066;">alert</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'clicked window'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>DOM 规范中并没有说事件绑在window上会怎么样，在IE中(注：低版本)并不会触发，在Firefox中会出发。</p>
<p>移除一个事件，需要传入原事件指针，故绑的匿名函数不能被移除掉。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">para.<span style="color: #660066;">removeEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> paraHandler<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>终止默认事件<br />
e.preventDefault();</p>
<p>并不是所有事件的默认行为都能被终止，可以检查事件对象的cancellable字段来确认。</p>
<p>IE中事件不同的部分：</p>
<p>1.（低版本的）IE没有addEventListener() 但IE5开始它有个等价的 attachEvent()方法<br />
2.attachEvent()中click要写作onclick<br />
3.使用老式方法（onclick）时，回调函数并不会传入event参数，但会有个全局的window.event供使用(注：现实场景中它需要先cache下来)<br />
4.IE的事件没有target属性用于指示目标函数，但有个等价的srcElement<br />
5.并不是素偶有的事件都有捕获截断，所以只能使用冒泡<br />
6.没有stopPropagation()方法，但是可以设置cancelBubble 属性值为true<br />
7.没有preventDefault()方法，但是可以设置returnValue值为false<br />
8.removeEventListener()的等效方法detachEvent().</p>
<p>兼容性示例：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> callback<span style="color: #009900;">&#40;</span>evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #006600; font-style: italic;">// prep work</span>
     evt <span style="color: #339933;">=</span> evt <span style="color: #339933;">||</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">;</span>
     <span style="color: #003366; font-weight: bold;">var</span> target <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> evt.<span style="color: #660066;">target</span> <span style="color: #339933;">!==</span> <span style="color: #3366CC;">'undefined'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> evt.<span style="color: #660066;">target</span> <span style="color: #339933;">:</span> evt.<span style="color: #660066;">srcElement</span><span style="color: #339933;">;</span>
     <span style="color: #006600; font-style: italic;">// actual callback work</span>
     console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>target.<span style="color: #660066;">nodeName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">// start listening for click events</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// FF</span>
     document.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span> callback<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">// IE</span>
     document.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onclick'</span><span style="color: #339933;">,</span> callback<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
     document.<span style="color: #660066;">onclick</span> <span style="color: #339933;">=</span> callback<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>事件类型</strong></p>
<p>鼠标事件：<br />
mouseup, mousedown, click (the sequence is mousedown-up-click), dblclick</p>
<p>mouseover (mouse is over an element), mouseout (mouse was over an element but left it), mousemove</p>
<p>键盘事件：<br />
keydown, keypress, keyup (occur in this sequence)</p>
<p>载入\window事件：<br />
load (an image or a page and all of its components are done loading), unload (user leaves the page), beforeunload (the script can provide the user with an option to stop the unload)<br />
abort (user stops loading the page in Firefox or an image in IE), error (a JavaScript error in Firefox and IE, also when an image cannot be loaded in IE)<br />
resize (browser window is resized), scroll (the page is scrolled), contextmenu (the right-click menu appears)</p>
<p>表单事件：<br />
focus (enter a form field), blur (leave form field)<br />
change (leave a field after the value has changed), select (select text in a text field)<br />
reset, submit</p>
<p><strong>AJAX</strong>（XMLHttpRequest以及IE7之前使用ActiveXObject）<br />
-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-4.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(四)">Object-Oriented JavaScript笔记(四)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-2.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(二)">Object-Oriented JavaScript笔记(二)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-5.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(五)">Object-Oriented JavaScript笔记(五)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-3.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(三)">Object-Oriented JavaScript笔记(三)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(一)">Object-Oriented JavaScript笔记(一)</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/object-oriented-javascript-note-6.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/object-oriented-javascript-note-6.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/_QBfovNSN_antrLANjrHZzBHLd8/0/da"><img src="http://feedads.g.doubleclick.net/~a/_QBfovNSN_antrLANjrHZzBHLd8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_QBfovNSN_antrLANjrHZzBHLd8/1/da"><img src="http://feedads.g.doubleclick.net/~a/_QBfovNSN_antrLANjrHZzBHLd8/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/object-oriented-javascript-note-6.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object-Oriented JavaScript笔记(五)</title>
		<link>http://ioio.name/object-oriented-javascript-note-5.html</link>
		<comments>http://ioio.name/object-oriented-javascript-note-5.html#comments</comments>
		<pubDate>Fri, 25 May 2012 05:05:49 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2043</guid>
		<description><![CDATA[Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) Object-Oriented JavaScript笔记(三) Object-Oriented JavaScript笔记(四) 第六章 继承 空的构造函数—new F() 用于解决原型链上的属性被覆盖的问题。 var extend = function&#40;origin, target&#41;&#123; var F = function&#40;&#41;&#123;&#125;; F.prototype = origin.prototype; target.prototype = new F&#40;&#41;; target.prototype.constructor = target; &#125;; &#160; var A = function&#40;&#41;&#123;&#125;; A.prototype.name = 'A'; A.prototype.toString = function&#40;&#41;&#123; return this.name&#125;; &#160; var B = function&#40;&#41;&#123;&#125;; extend&#40;A,B&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Object-Oriented JavaScript 笔记<br />
<a href="http://ioio.name/object-oriented-javascript-note.html" target="_blank">Object-Oriented JavaScript笔记(一)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-2.html" target="_blank">Object-Oriented JavaScript笔记(二)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-3.html" target="_blank">Object-Oriented JavaScript笔记(三)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-4.html" target="_blank">Object-Oriented JavaScript笔记(四)</a></p>
<p><strong>第六章 继承</strong></p>
<p>空的构造函数—new F()<br />
用于解决原型链上的属性被覆盖的问题。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> extend <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>origin<span style="color: #339933;">,</span> target<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> F <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
     F.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> origin.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
     target.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     target.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">=</span> target<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> A <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
A.<span style="color: #660066;">prototype</span>.<span style="color: #000066;">name</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'A'</span><span style="color: #339933;">;</span>
A.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">toString</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #000066;">name</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> B <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
extend<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
B.<span style="color: #660066;">prototype</span>.<span style="color: #000066;">name</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'B'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">/*
var a = new A();
var b = new B();
b instanceof B
true
b instanceof A
true
a instanceof A
true
a instanceof B
false
*/</span></pre></div></div>

<p>Uber 访问父方法。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> extend <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>origin<span style="color: #339933;">,</span> target<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> F <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
     F.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> origin.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
     target.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     target.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">=</span> target<span style="color: #339933;">;</span>
     target.<span style="color: #660066;">uber</span> <span style="color: #339933;">=</span> origin.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> A <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
A.<span style="color: #660066;">prototype</span>.<span style="color: #000066;">name</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'A'</span><span style="color: #339933;">;</span>
A.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">toString</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">uber</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          result<span style="color: #009900;">&#91;</span>result.<span style="color: #660066;">length</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">uber</span>.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     result<span style="color: #009900;">&#91;</span>result.<span style="color: #660066;">length</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #000066;">name</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">return</span> result.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">', '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
A.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">show</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'A show'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> B <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
extend<span style="color: #009900;">&#40;</span>A<span style="color: #339933;">,</span>B<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
B.<span style="color: #660066;">prototype</span>.<span style="color: #000066;">name</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'B'</span><span style="color: #339933;">;</span>
B.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">show</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">uber</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'B show'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">/*
var a = new A();
var b = new B();
b instanceof B
true
b instanceof A
true
a instanceof A
true
a instanceof B
false
*/</span></pre></div></div>

<p>用函数来实现继承 （注：实际上上面的两个示例的extend已经是被我封装过的了）</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> exntend <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>Child<span style="color: #339933;">,</span> Parent<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> F <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
     F.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> Parent.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
     Child.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     Child.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">=</span> Child<span style="color: #339933;">;</span>
     Child.<span style="color: #660066;">uber</span> <span style="color: #339933;">=</span> Parent.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>复制属性</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> extend2<span style="color: #009900;">&#40;</span>Child<span style="color: #339933;">,</span> Parent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> p <span style="color: #339933;">=</span> Parent.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
     <span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> Child.<span style="color: #660066;">prototype</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          c<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     c.<span style="color: #660066;">uber</span> <span style="color: #339933;">=</span> p<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>当复制引用带来的问题</p>
<p>修改引用对象会导致原型的也被修改。</p>
<p>从对象中继承：</p>
<p>浅拷贝</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> extendCopy<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     c<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     c.<span style="color: #660066;">uber</span> <span style="color: #339933;">=</span> p<span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">return</span> c<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>深拷贝：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> deepCopy<span style="color: #009900;">&#40;</span>p<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> c <span style="color: #339933;">||</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">'object'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               c<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">constructor</span> <span style="color: #339933;">===</span> Array<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
               deepCopy<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> c<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
               c<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> p<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span>
     <span style="color: #000066; font-weight: bold;">return</span> c<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>object()构造起，老道提议的形式。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> object<span style="color: #009900;">&#40;</span>o<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">function</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
     F.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> o<span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>混合原型拷贝和属性继承（很多时候需要继承一个对象，并给它添加一些属性用）</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> objectPlus<span style="color: #009900;">&#40;</span>o<span style="color: #339933;">,</span> stuff<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> n<span style="color: #339933;">;</span>
     <span style="color: #003366; font-weight: bold;">function</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
     F.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> o<span style="color: #339933;">;</span>
     n <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> F<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     n.<span style="color: #660066;">uber</span> <span style="color: #339933;">=</span> o<span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> stuff<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> stuff<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span>
     <span style="color: #000066; font-weight: bold;">return</span> n<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>多重继承，说白了就是按顺序进行属性复制，后出现的覆盖已经存在的。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> multi<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #003366; font-weight: bold;">var</span> n <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> stuff<span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> len <span style="color: #339933;">=</span> arguments.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
     <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          stuff <span style="color: #339933;">=</span> arguments<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> stuff<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               n<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> stuff<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span>
     <span style="color: #000066; font-weight: bold;">return</span> n<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-4.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(四)">Object-Oriented JavaScript笔记(四)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-2.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(二)">Object-Oriented JavaScript笔记(二)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-3.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(三)">Object-Oriented JavaScript笔记(三)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-6.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(六)">Object-Oriented JavaScript笔记(六)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(一)">Object-Oriented JavaScript笔记(一)</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/object-oriented-javascript-note-5.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/object-oriented-javascript-note-5.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/1Eu-ytlKQPe32clxZd7yOxmpuDg/0/da"><img src="http://feedads.g.doubleclick.net/~a/1Eu-ytlKQPe32clxZd7yOxmpuDg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/1Eu-ytlKQPe32clxZd7yOxmpuDg/1/da"><img src="http://feedads.g.doubleclick.net/~a/1Eu-ytlKQPe32clxZd7yOxmpuDg/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/object-oriented-javascript-note-5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chrome For Mac 离线安装包下载</title>
		<link>http://ioio.name/google-chrome-mac.html</link>
		<comments>http://ioio.name/google-chrome-mac.html#comments</comments>
		<pubDate>Tue, 22 May 2012 15:29:01 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2051</guid>
		<description><![CDATA[以前写过一篇Chrome离线安装包下载方法是用于Windows的，今天重装了Mac，由于最新的版本不稳定，所以还是下载老版本。网上其它站点下载的不可信，得从Google官方的站点下才行，终于，偶还真把 Google Chrome 18.0.1025.168这个版本给下载下来了。 实际下载地址： http://dl.google.com/chrome/mac/GoogleChrome-18.0.1025.168.dmg 在Chrome Releases Blog查到对应的版本号，替换即可。 -EOF- Related posts:Chrome离线安装包下载方法Chrome OS 拿什么去爱你Chrome自带的HTTP请求抓包系统一周开源项目集锦(2011/11/01)我常使用的免费软件Copyright &#169; 2005~2011 &#124; Permalink &#124; 1 Comments &#124; Close To U 订阅 Twitter 域名优惠码 Media Temple空间 主机/域名优惠码 )]]></description>
			<content:encoded><![CDATA[<p>以前写过一篇<a href="http://ioio.name/chrome-download.html" target="_blank">Chrome离线安装包下载方法</a>是用于Windows的，今天重装了Mac，由于最新的版本不稳定，所以还是下载老版本。网上其它站点下载的不可信，得从Google官方的站点下才行，终于，偶还真把 Google Chrome 18.0.1025.168这个版本给下载下来了。<br />
实际下载地址：</p>
<blockquote><p>http://dl.google.com/chrome/mac/GoogleChrome-<del datetime="2012-05-22T15:20:04+00:00">18.0.1025.168</del>.dmg</p></blockquote>
<p>在<a href="http://googlechromereleases.blogspot.com/" target="_blank">Chrome Releases Blog</a>查到对应的版本号，替换即可。<br />
-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/chrome-download.html" rel="bookmark" title="Permanent Link: Chrome离线安装包下载方法">Chrome离线安装包下载方法</a></li><li><a href="http://ioio.name/chrome-os-preview.html" rel="bookmark" title="Permanent Link: Chrome OS 拿什么去爱你">Chrome OS 拿什么去爱你</a></li><li><a href="http://ioio.name/chrome-net-internals.html" rel="bookmark" title="Permanent Link: Chrome自带的HTTP请求抓包系统">Chrome自带的HTTP请求抓包系统</a></li><li><a href="http://ioio.name/open-source-20111101.html" rel="bookmark" title="Permanent Link: 一周开源项目集锦(2011/11/01)">一周开源项目集锦(2011/11/01)</a></li><li><a href="http://ioio.name/free-software-of-used.html" rel="bookmark" title="Permanent Link: 我常使用的免费软件">我常使用的免费软件</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/google-chrome-mac.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/google-chrome-mac.html#comments">1 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/n_loHClNCbJCakl6IQrKbVDvTk0/0/da"><img src="http://feedads.g.doubleclick.net/~a/n_loHClNCbJCakl6IQrKbVDvTk0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/n_loHClNCbJCakl6IQrKbVDvTk0/1/da"><img src="http://feedads.g.doubleclick.net/~a/n_loHClNCbJCakl6IQrKbVDvTk0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/google-chrome-mac.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Object-Oriented JavaScript笔记(四)</title>
		<link>http://ioio.name/object-oriented-javascript-note-4.html</link>
		<comments>http://ioio.name/object-oriented-javascript-note-4.html#comments</comments>
		<pubDate>Tue, 10 Apr 2012 14:14:03 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2038</guid>
		<description><![CDATA[Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) Object-Oriented JavaScript笔记(三) 第五章 原型 原型链继承：new 出来的对象仍能继承到给原型prototype添加的方法 给实例添加与原型属性同名的属性，会隐藏原型链属性。 >>> var Class = function(){}; >>> Class.prototype.name = &#8216;John&#8217;; >>> var toy = new Class() >>> toy.name = &#8216;Tom&#8217;; >>> toy.name “Tom” >>> delete toy.name >>> toy.name “John” 并不是所有的属性都会在for in中被枚举出来。 判断属性是自身属性还是原型链上的属性使用hasOwnProperty() propertyIsEnumerable()对于prototype上的属性都会返回false，虽然他们都能在for in中被枚举出来。 isPrototypeOf()判断一个对象是否是另一个对象的原型。 Prototype陷阱 prototype对象被替换后，实例的原型链仍然是存在的 prototype.constructor并不可靠 介于此，重写prototype后，最好重置constructor (这里的确很让人迷惑) －EOF- Related [...]]]></description>
			<content:encoded><![CDATA[<p>Object-Oriented JavaScript 笔记<br />
<a href="http://ioio.name/object-oriented-javascript-note.html" target="_blank">Object-Oriented JavaScript笔记(一)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-2.html" target="_blank">Object-Oriented JavaScript笔记(二)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-3.html" target="_blank">Object-Oriented JavaScript笔记(三)</a></p>
<p><strong>第五章 原型</strong></p>
<p><strong>原型链继承</strong>：new 出来的对象仍能继承到给原型prototype添加的方法</p>
<p>给实例添加与原型属性同名的属性，会隐藏原型链属性。<br />
>>> var Class = function(){};<br />
>>> Class.prototype.name = &#8216;John&#8217;;<br />
>>> var toy = new Class()<br />
>>> toy.name = &#8216;Tom&#8217;;<br />
>>> toy.name<br />
“Tom”<br />
>>> delete toy.name<br />
>>> toy.name<br />
“John”</p>
<p>并不是所有的属性都会在for in中被枚举出来。<br />
判断属性是自身属性还是原型链上的属性使用hasOwnProperty()<br />
propertyIsEnumerable()对于prototype上的属性都会返回false，虽然他们都能在for in中被枚举出来。</p>
<p>isPrototypeOf()判断一个对象是否是另一个对象的原型。</p>
<p><strong>Prototype陷阱</strong><br />
prototype对象被替换后，实例的原型链仍然是存在的<br />
prototype.constructor并不可靠<br />
介于此，重写prototype后，最好重置constructor (这里的确很让人迷惑)<br />
－EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-2.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(二)">Object-Oriented JavaScript笔记(二)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-5.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(五)">Object-Oriented JavaScript笔记(五)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-3.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(三)">Object-Oriented JavaScript笔记(三)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-6.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(六)">Object-Oriented JavaScript笔记(六)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(一)">Object-Oriented JavaScript笔记(一)</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/object-oriented-javascript-note-4.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/object-oriented-javascript-note-4.html#comments">1 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/nRu-3kYBHYxoXSw91pGttR7RzrM/0/da"><img src="http://feedads.g.doubleclick.net/~a/nRu-3kYBHYxoXSw91pGttR7RzrM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/nRu-3kYBHYxoXSw91pGttR7RzrM/1/da"><img src="http://feedads.g.doubleclick.net/~a/nRu-3kYBHYxoXSw91pGttR7RzrM/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/object-oriented-javascript-note-4.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>新项目: Story Board</title>
		<link>http://ioio.name/about-story-board.html</link>
		<comments>http://ioio.name/about-story-board.html#comments</comments>
		<pubDate>Mon, 02 Apr 2012 16:36:59 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2031</guid>
		<description><![CDATA[大约在前年，我就开始使用Python写Blog程序并将其Hosted在GAE上，并一度有将其开源的打算，后由于GAE数据库读取价格策略改变，代价太高而放弃；期间还写了一个简单的图片存储程序承诺将其开源，由于代码过于草稿没时间整理也一拖再拖。两者，代码至今都没有释放出来。 而在今年年初，GAE完美支持Django+MySQL，给原本失去的希望又重新点燃，用其托管一个小访问量的站点又有了规避方案，另一方面Cloud SQL可以方便的导出数据，数据备份不需要再经过复杂的操作。在二月结束的时候，我写了一个小的网站原型，后经过改进，并将其命名为Story Board托管在GitHub上开源出来。 同时用它替换原来的Oh Bug!。希望Oh Bug!不再单单只是一个Blog，也是一个小众技术讨论区，欢迎任何人参与进来讨论～ Project Story Board https://github.com/darcyliu/storyboard Oh Bug!]]></description>
			<content:encoded><![CDATA[<p>大约在前年，我就开始使用Python写Blog程序并将其Hosted在GAE上，并一度有将其开源的打算，后由于GAE数据库读取价格策略改变，代价太高而放弃；期间还写了一个简单的图片存储程序承诺将其开源，由于代码过于草稿没时间整理也一拖再拖。两者，代码至今都没有释放出来。</p>
<p>而在今年年初，GAE完美支持Django+MySQL，给原本失去的希望又重新点燃，用其托管一个小访问量的站点又有了规避方案，另一方面Cloud SQL可以方便的导出数据，数据备份不需要再经过复杂的操作。在二月结束的时候，我写了一个小的网站原型，后经过改进，并将其命名为<a href="https://github.com/darcyliu/storyboard" target="_blank"><strong>Story Board</strong></a>托管在GitHub上开源出来。</p>
<p>同时用它替换原来的<a href="http://www.ohbug.com/" target="_blank">Oh Bug!</a>。希望Oh Bug!不再单单只是一个Blog，也是一个小众技术讨论区，欢迎任何人参与进来讨论～</p>
<p>Project Story Board<br />
<a href="https://github.com/darcyliu/storyboard" target="_blank">https://github.com/darcyliu/storyboard</a></p>
<p>Oh Bug!<br />
<a href="http://www.ohbug.com/"" target="_blank">http://www.ohbug.com/</a></p>
<p>You are very welcome.</p>
<p>-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/the-boys-and-girls-guide-to-getting-down.html" rel="bookmark" title="Permanent Link: 电影《青少年堕落指南》">电影《青少年堕落指南》</a></li><li><a href="http://ioio.name/commonly-used-programs-on-php.html" rel="bookmark" title="Permanent Link: 常用PHP程式介绍">常用PHP程式介绍</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/about-story-board.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/about-story-board.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/ZI8uf7h0kRipym7OkTqgf1kHkyk/0/da"><img src="http://feedads.g.doubleclick.net/~a/ZI8uf7h0kRipym7OkTqgf1kHkyk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ZI8uf7h0kRipym7OkTqgf1kHkyk/1/da"><img src="http://feedads.g.doubleclick.net/~a/ZI8uf7h0kRipym7OkTqgf1kHkyk/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/about-story-board.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>实现JavaScript类继承(inherits)</title>
		<link>http://ioio.name/javascript-inherits.html</link>
		<comments>http://ioio.name/javascript-inherits.html#comments</comments>
		<pubDate>Thu, 22 Mar 2012 15:45:57 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2029</guid>
		<description><![CDATA[简单实现了个JavaScript类继承（比下午在公司实现的要简单得多），继承prototype方法和静态方法，实际使用过程中mix函数还需要丰满一下。这东西水很深，自己也一知半解的，不多说直接放代码。 Function.prototype.method = function&#40;name,fn&#41;&#123; this.prototype&#91;name&#93; = fn; return this; &#125; Function.method&#40;'inherits',&#40;function&#40;&#41;&#123; function mix&#40;a,b&#41;&#123; for&#40;var i in b&#41;&#123; //replace if&#40;typeof a&#91;i&#93; == 'undefined'&#41;&#123; a&#91;i&#93; = b&#91;i&#93;; &#125; &#125; &#125; return function&#40;Parent&#41;&#123; var fn = function&#40;&#41;&#123;&#125;; mix&#40;this.prototype,Parent.prototype&#41;; mix&#40;this,Parent&#41;; this.__super__ = Parent; //static method //object.__super__.demo &#160; //prototype method //object.__super__.prototype.hidden return this; &#125;; &#125;&#41;&#40;&#41;&#41;; &#160; &#160; var a = [...]]]></description>
			<content:encoded><![CDATA[<p>简单实现了个JavaScript类继承（比下午在公司实现的要简单得多），继承prototype方法和静态方法，实际使用过程中mix函数还需要丰满一下。这东西水很深，自己也一知半解的，不多说直接放代码。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">Function</span>.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">method</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #339933;">,</span>fn<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">prototype</span><span style="color: #009900;">&#91;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> fn<span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">Function</span>.<span style="color: #660066;">method</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'inherits'</span><span style="color: #339933;">,</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">function</span> mix<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span>b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #000066; font-weight: bold;">in</span> b<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #006600; font-style: italic;">//replace</span>
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'undefined'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> b<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> 
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>Parent<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #003366; font-weight: bold;">var</span> fn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		mix<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">prototype</span><span style="color: #339933;">,</span>Parent.<span style="color: #660066;">prototype</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		mix<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span>Parent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.__super__ <span style="color: #339933;">=</span> Parent<span style="color: #339933;">;</span>
		<span style="color: #006600; font-style: italic;">//static method</span>
		<span style="color: #006600; font-style: italic;">//object.__super__.demo</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">//prototype method</span>
		<span style="color: #006600; font-style: italic;">//object.__super__.prototype.hidden</span>
	  <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> b <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> d <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
a.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">show</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a show'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
b.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">hidden</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'b hidden'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
a.<span style="color: #660066;">test</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a test'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
b.<span style="color: #660066;">demo</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'b demo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//usage</span>
b.<span style="color: #660066;">inherits</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
c.<span style="color: #660066;">inherits</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
d.<span style="color: #660066;">inherits</span><span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-2.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(二)">Object-Oriented JavaScript笔记(二)</a></li><li><a href="http://ioio.name/javascript-get-up-guide.html" rel="bookmark" title="Permanent Link: JavaScript 入门指南">JavaScript 入门指南</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-4.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(四)">Object-Oriented JavaScript笔记(四)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-5.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(五)">Object-Oriented JavaScript笔记(五)</a></li><li><a href="http://ioio.name/core-javascript-pitfalls.html" rel="bookmark" title="Permanent Link: JavaScript性能陷阱">JavaScript性能陷阱</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/javascript-inherits.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/javascript-inherits.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/XYlXSqANVwzVqifQiuWcFmbhiws/0/da"><img src="http://feedads.g.doubleclick.net/~a/XYlXSqANVwzVqifQiuWcFmbhiws/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XYlXSqANVwzVqifQiuWcFmbhiws/1/da"><img src="http://feedads.g.doubleclick.net/~a/XYlXSqANVwzVqifQiuWcFmbhiws/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/javascript-inherits.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object-Oriented JavaScript笔记(三)</title>
		<link>http://ioio.name/object-oriented-javascript-note-3.html</link>
		<comments>http://ioio.name/object-oriented-javascript-note-3.html#comments</comments>
		<pubDate>Tue, 20 Mar 2012 16:53:43 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2022</guid>
		<description><![CDATA[Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) 第四章 对象 对象 对象属性名需要引号括起来的情况有： 1.保留字2.包含空格或特殊字符3.以数字开头 Best Practice Tip: No quotes 1.使用点访问符访问方法和属性 2.在对象字面量中不要使用引号将属性括起来 构造函数 按照约定，构造函数首字母大写 不使用new操作符调用构造函数跟调用普通函数无异，此时this指针指向全局对象global object JavaScript 是运行在宿主环境中的，其提供一个全局对象，所有的全局变量都是全局对象的属性。 在浏览器中，该全局对象是window，如 >>> var a = 1; >>> window.a 1 instanceof操作符用于测试对象的构造函数 注：原书103页的h instanceof Object;得到false实际上是印刷错误， Object是基类 特例： >>> Object.prototype instanceof Object; false >>> Object instanceof Object; true 说明Object.prototype可能是内置类型 函数返回对象，可以用该特性来改变this指针 function Test = [...]]]></description>
			<content:encoded><![CDATA[<p>Object-Oriented JavaScript 笔记<br />
<a href="http://ioio.name/object-oriented-javascript-note.html" target="_blank">Object-Oriented JavaScript笔记(一)</a><br />
<a href="http://ioio.name/object-oriented-javascript-note-2.html" target="_blank">Object-Oriented JavaScript笔记(二)</a></p>
<p><strong>第四章 对象</strong></p>
<p><strong>对象</strong><br />
对象属性名需要引号括起来的情况有：<br />
1.保留字2.包含空格或特殊字符3.以数字开头<br />
Best Practice Tip: No quotes<br />
1.使用点访问符访问方法和属性<br />
2.在对象字面量中不要使用引号将属性括起来</p>
<p><strong>构造函数</strong><br />
按照约定，构造函数首字母大写</p>
<p>不使用new操作符调用构造函数跟调用普通函数无异，此时this指针指向全局对象global object</p>
<p>JavaScript 是运行在宿主环境中的，其提供一个全局对象，所有的全局变量都是全局对象的属性。<br />
在浏览器中，该全局对象是window，如<br />
>>> var a = 1;<br />
>>> window.a<br />
1</p>
<p>instanceof操作符用于测试对象的构造函数<br />
注：原书103页的h instanceof Object;得到false实际上是印刷错误， Object是基类</p>
<p>特例：<br />
>>> Object.prototype instanceof Object;<br />
false<br />
>>> Object instanceof Object;<br />
true<br />
说明Object.prototype可能是内置类型<br />
函数返回对象，可以用该特性来改变this指针<br />
function Test = function(){    this.name = &#8216;Tom&#8217;;<br />
    return {&#8216;name&#8217;:'Tony&#8217;};<br />
}</p>
<p>传入函数的对象是按引用传递的，将对象赋值给其他变量也如此，这意味着只是变了别名，修改引用对象也会改变原对象。</p>
<p>指向同一对象的变量比较时才会返回true，即使比较两个对象包含相同的方法和属性得到的也是false。</p>
<p><strong>内置对象</strong></p>
<p>内置对象可以分为三组：<br />
1.数据包装类的 &#8212; Object, Array, Function, Boolean, Number, and String<br />
2.工具类的 &#8212; Math, Date, RegExp<br />
3.异常类的 &#8212; Error</p>
<p><strong>对象构造方法：</strong><br />
1.使用构造函数<br />
var o = new Object();</p>
<p>2.使用字面量<br />
var o = {};</p>
<p>简单对象valueOf方法返回的是自身<br />
>>> var o = {};<br />
>>> o.valueOf() === o<br />
true</p>
<p>继承自Object的对象会带上<br />
o.constructor<br />
o.toString()<br />
o.valueOf()</p>
<p><strong>数组对象</strong></p>
<p>数组对象构造方法：<br />
1.使用构造函数<br />
var a = new Array();</p>
<p>2.使用字面量<br />
var a = [];</p>
<p>数组构造函数传入单个数字的话，定义的是数组的长度；但使用字面量方式不存在该问题。<br />
>>> var a2 = new Array(5);<br />
>>> a2<br />
[undefined, undefined, undefined, undefined, undefined]</p>
<p>>>> var a = [5];<br />
>>> a<br />
[5]</p>
<p>数组的常用方法<br />
1.pop 取出最后一个<br />
2.push 插入元素到尾端<br />
3.sort 对数组元素排序<br />
4.join 将内容转换成字符串<br />
5.slice 切片，不改变原对象<br />
6.splice 切片(或替换)，改变原对象</p>
<p><strong>函数</strong><br />
Function构造函数实际上使用了eval来计算传入的字符串，尽量避免使用它。<br />
>>> var second = new Function(&#8216;a, b, c&#8217;, &#8216;d&#8217;, &#8216;return arguments;&#8217;);<br />
>>> second(1,2,3,4);<br />
[1, 2, 3, 4]</p>
<p>Function有一个length属性，用来返回函数的参数个数。</p>
<p>Function还有一个caller属性，它不是ECMA标准里面的，但浏览器都实现了它。</p>
<p>实例会可以调用构造函数prototype中属性和方法。</p>
<p>Function的toString方法返回其source code.</p>
<p>call和apply方法可以将对象自己的方法借给其它对象使用。</p>
<p>arguments是个类数组;arguments.callee指向自身。</p>
<p>arguments.callee可以帮助匿名函数调用自身(递归调用)：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>count <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        arguments.<span style="color: #660066;">callee</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">++</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Boolean对象</strong></p>
<p>Boolean对象几乎没有用。在不使用new操作符的情况下，它将非布尔值转换成布尔值，这于使用!!value是等效的。<br />
>>> Boolean(&#8216;test&#8217;) == !!&#8217;test&#8217;<br />
true</p>
<p><strong>Number对象</strong></p>
<p>Number对象比较有趣一点，它有一些有意思的属性：<br />
Number.MAX_VALUE<br />
Number.MIN_VALUE<br />
Number.POSITIVE_INFINITY<br />
Number.NEGATIVE_INFINITY<br />
Number.NaN</p>
<p>Number对象提供三个内置方法：toFixed() 小数点位数<br />
toPrecision() 精度<br />
toExponential() 科学计数法 </p>
<p>Number对象的toString方法也是很有趣的，可以传入一个[2~36]之间的整数表示要转换的进制。<br />
>>> (9).toString(2)<br />
“1001&#8243;</p>
<p><strong>String对象</strong></p>
<p>原始的string和String对象是不同的<br />
>>> var primitive = &#8216;Hello&#8217;;<br />
>>> typeof primitive;<br />
“string”</p>
<p>>>> var obj = new String(&#8216;world&#8217;);<br />
>>> typeof obj;<br />
“object”</p>
<p>因而<br />
>>> Boolean(“”)<br />
false<br />
>>> Boolean(new String(“”))<br />
true</p>
<p>String对象带有一些有用的方法，string类型不带有这些方法和属性，但是在普通类型上调用这些方法的时候，JavaScript将其作为对象对待。</p>
<p><strong>Math/Date</strong></p>
<p>Math/Date/RegExp都是工具对象<br />
Math不是构造函数，不能使用new操作符<br />
Date有两个静态方法<br />
Date.parse(&#8216;Jan 1, 2008&#8242;)<br />
Date.UTC(2008, 0, 1)</p>
<p><strong>RegExp</strong></p>
<p>RegExp正则表达式采用的是Perl 5语法<br />
RegExp的几个属性global 全局<br />
ignoreCase 大小写敏感<br />
multiline 多行<br />
lastIndex 开始位置<br />
source 正则表达式</p>
<p>除lastIndex外其余都是只读。</p>
<p><strong>异常</strong><br />
几种内置异常对象，都继承自Error<br />
EvalError<br />
RangeError<br />
ReferenceError<br />
SyntaxError<br />
TypeError<br />
URIError</p>
<p>抛出异常throw new Error(‘Custom Error’);<br />
-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-4.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(四)">Object-Oriented JavaScript笔记(四)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-2.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(二)">Object-Oriented JavaScript笔记(二)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-5.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(五)">Object-Oriented JavaScript笔记(五)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-6.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(六)">Object-Oriented JavaScript笔记(六)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(一)">Object-Oriented JavaScript笔记(一)</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/object-oriented-javascript-note-3.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/object-oriented-javascript-note-3.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/IDCNtgrCni5-th0O9Wyhq3DOQVg/0/da"><img src="http://feedads.g.doubleclick.net/~a/IDCNtgrCni5-th0O9Wyhq3DOQVg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IDCNtgrCni5-th0O9Wyhq3DOQVg/1/da"><img src="http://feedads.g.doubleclick.net/~a/IDCNtgrCni5-th0O9Wyhq3DOQVg/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/object-oriented-javascript-note-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object-Oriented JavaScript笔记(二)</title>
		<link>http://ioio.name/object-oriented-javascript-note-2.html</link>
		<comments>http://ioio.name/object-oriented-javascript-note-2.html#comments</comments>
		<pubDate>Thu, 15 Mar 2012 15:48:47 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2014</guid>
		<description><![CDATA[Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) 第三章 函数 JavaScript会给定义了但是没有传值的参数赋值为undefined，若是参数多于定义的，会被忽略。 没有函数都会带有一个名为arguments的类数组变量，包含所有传入的参数信息。 JavaScript内置函数（Pre-defined Functions）： parseInt() parseFloat() isNaN() isFinite() encodeURI() decodeURI() encodeURIComponent() decodeURIComponent() eval() 使用parseInt时最好每次都明确指定第二个（基数）参数，如 parseInt(&#8216;FF&#8217;, 16) parseFloat只接受一个参数，并能够识别指数表示法，如 parseFloat(&#8217;123e2&#8242;) escape() 与 unescape() 已经被弃用，不应该再被使用。 alert并不是JavaScript的一部分，并且它会阻塞浏览器线程，在富ajax应用中不应该使用它。 未使用var 声明的变量会被分配到全局作用域 >>> var f = function(){test = 2;}; >>> test ReferenceError: test is not defined >>> f(); >>> test 2 函数中声明的局部变量与全局变量同名会覆盖同名全局变量，即使是先使用后声明。 var a = [...]]]></description>
			<content:encoded><![CDATA[<p>Object-Oriented JavaScript 笔记<br />
<a href="http://ioio.name/object-oriented-javascript-note.html">Object-Oriented JavaScript笔记(一)</a></p>
<p><strong>第三章 函数</strong></p>
<p>JavaScript会给定义了但是没有传值的参数赋值为undefined，若是参数多于定义的，会被忽略。</p>
<p>没有函数都会带有一个名为arguments的类数组变量，包含所有传入的参数信息。</p>
<p><strong>JavaScript内置函数（Pre-defined Functions）：</strong><br />
parseInt()<br />
parseFloat()<br />
isNaN()<br />
isFinite()<br />
encodeURI()<br />
decodeURI()<br />
encodeURIComponent()<br />
decodeURIComponent()<br />
eval()</p>
<p>使用parseInt时最好每次都明确指定第二个（基数）参数，如 parseInt(&#8216;FF&#8217;, 16)</p>
<p>parseFloat只接受一个参数，并能够识别指数表示法，如 parseFloat(&#8217;123e2&#8242;)</p>
<p>escape() 与 unescape() 已经被弃用，不应该再被使用。</p>
<p>alert并不是JavaScript的一部分，并且它会阻塞浏览器线程，在富ajax应用中不应该使用它。</p>
<p>未使用var 声明的变量会被分配到全局作用域<br />
>>> var f = function(){test = 2;};<br />
>>> test<br />
ReferenceError: test is not defined<br />
>>> f();<br />
>>> test<br />
2</p>
<p>函数中声明的局部变量与全局变量同名会覆盖同名全局变量，即使是先使用后声明。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #CC0000;">123</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">function</span> f<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
     console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
f<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>匿名函数</strong></p>
<p>不仅是字符串，一些常量写在代码中也是可以的</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #3366CC;">&quot;test&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> undefined<span style="color: #339933;">;</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p>ECMAScript 5严格模式（Strict Mode）便是利用该特性</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #3366CC;">'use strict'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Lexical Scope 函数工作在定义时的作用域，而非执行作用域。它仅能访问自己的作用域和全局作用域。</p>
<p>>>> function f1(){var a = 1; f2();}<br />
>>> function f2(){return a;}<br />
>>> f1();<br />
a is not defined</p>
<p><strong>闭包Closure的常用场景</strong><br />
如：循环、get/set访问器、迭代器<br />
-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/object-oriented-javascript-note-4.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(四)">Object-Oriented JavaScript笔记(四)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-5.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(五)">Object-Oriented JavaScript笔记(五)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-3.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(三)">Object-Oriented JavaScript笔记(三)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note-6.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(六)">Object-Oriented JavaScript笔记(六)</a></li><li><a href="http://ioio.name/object-oriented-javascript-note.html" rel="bookmark" title="Permanent Link: Object-Oriented JavaScript笔记(一)">Object-Oriented JavaScript笔记(一)</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/object-oriented-javascript-note-2.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/object-oriented-javascript-note-2.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/A7XhcKY_Szuf6o8lSmkliAyV9P0/0/da"><img src="http://feedads.g.doubleclick.net/~a/A7XhcKY_Szuf6o8lSmkliAyV9P0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/A7XhcKY_Szuf6o8lSmkliAyV9P0/1/da"><img src="http://feedads.g.doubleclick.net/~a/A7XhcKY_Szuf6o8lSmkliAyV9P0/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/object-oriented-javascript-note-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Mac OS X]Lion编译安装mod_python</title>
		<link>http://ioio.name/lion-install-mod-python.html</link>
		<comments>http://ioio.name/lion-install-mod-python.html#comments</comments>
		<pubDate>Thu, 08 Mar 2012 14:33:12 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2008</guid>
		<description><![CDATA[期望情况是下载好mod_python后执行编译并安装就能够搞定。 $ ./configure –with-apxs=/usr/sbin/apxs $ make $ sudo make install 但是事实却不尽人意，在Mac OS X Lion可能会遇到下面这个错误： connobject.c:142: error: request for member ‘next’ in something not a structure or union apxs:Error: Command failed with rc=65536 说明connobject.c这个文件中142行有错误，我们找到并打开它 vim src/connobject.c 将142行处的 !&#40;b == APR_BRIGADE_SENTINEL&#40;b&#41; &#124;&#124; 改为 !&#40;b == APR_BRIGADE_SENTINEL&#40;bb&#41; &#124;&#124; -EOF- Related posts:Ubuntu 安装 Python Imaging Library (PIL)Python文件编码安装golang程序语言开始学Python如何在 Debian/Ubuntu VPS [...]]]></description>
			<content:encoded><![CDATA[<p>期望情况是下载好mod_python后执行编译并安装就能够搞定。</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">$ ./configure –with-apxs=/usr/sbin/apxs
$ make
$ sudo make install</pre></div></div>

<p>但是事实却不尽人意，在Mac OS X Lion可能会遇到下面这个错误：<br />
<a href="http://ioio.name/wp-content/uploads/2012/03/mod_python_error.png"><img src="http://ioio.name/wp-content/uploads/2012/03/mod_python_error-512x208.png" alt="" title="mod_python_error" width="512" height="208" class="alignnone size-medium wp-image-2009" /></a></p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">connobject.c:142: error: request for member ‘next’ in something not a structure or union
apxs:Error: Command failed with rc=65536</pre></div></div>

<p>说明connobject.c这个文件中142行有错误，我们找到并打开它</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">vim src/connobject.c</pre></div></div>

<p>将142行处的</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>b <span style="color: #339933;">==</span> APR_BRIGADE_SENTINEL<span style="color: #009900;">&#40;</span>b<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span></pre></div></div>

<p>改为</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>b <span style="color: #339933;">==</span> APR_BRIGADE_SENTINEL<span style="color: #009900;">&#40;</span>bb<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span></pre></div></div>

<p>-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/ubuntu-pil.html" rel="bookmark" title="Permanent Link: Ubuntu 安装 Python Imaging Library (PIL)">Ubuntu 安装 Python Imaging Library (PIL)</a></li><li><a href="http://ioio.name/python-file-encoding.html" rel="bookmark" title="Permanent Link: Python文件编码">Python文件编码</a></li><li><a href="http://ioio.name/golang-install.html" rel="bookmark" title="Permanent Link: 安装golang程序语言">安装golang程序语言</a></li><li><a href="http://ioio.name/learning-python.html" rel="bookmark" title="Permanent Link: 开始学Python">开始学Python</a></li><li><a href="http://ioio.name/how-to-install-openvpn-on-a-debianubuntu-vps.html" rel="bookmark" title="Permanent Link: 如何在 Debian/Ubuntu VPS 安装 OpenVPN">如何在 Debian/Ubuntu VPS 安装 OpenVPN</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/lion-install-mod-python.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/lion-install-mod-python.html#comments">0 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/u1H7_fXGMz_DK9p-CmEEbiDS6Tc/0/da"><img src="http://feedads.g.doubleclick.net/~a/u1H7_fXGMz_DK9p-CmEEbiDS6Tc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/u1H7_fXGMz_DK9p-CmEEbiDS6Tc/1/da"><img src="http://feedads.g.doubleclick.net/~a/u1H7_fXGMz_DK9p-CmEEbiDS6Tc/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/lion-install-mod-python.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简单静态资源分发脚本</title>
		<link>http://ioio.name/cdn-cache-redirect.html</link>
		<comments>http://ioio.name/cdn-cache-redirect.html#comments</comments>
		<pubDate>Sun, 12 Feb 2012 03:16:17 +0000</pubDate>
		<dc:creator>枯藤昏鸦</dc:creator>
				<category><![CDATA[就是不分类]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ioio.name/?p=2005</guid>
		<description><![CDATA[网站静态资源太多的情况下有时候我们需要分成多个域名来请求这些静态资源。 如原来我们使用的 http://static.ioio.name/upload/hello.jpg 改成随机的使用 http://s1.ioio.name/upload/hello.jpg http://s2.ioio.name/upload/hello.jpg http://s3.ioio.name/upload/hello.jpg 这时候我们需要将s1/s2/s3服务器上的文件跟源服务器static同步。以使得他们都是访问的static上同名文件的拷贝。 这里我写了一段简单的php脚本采用溯源的策略来更新这些文件，当s1/s2/s3服务器上不存在该文件的时候，就向源服务器(static)请求该文件，并且保存在本地cache一份以便后续的相同请求使用。 1.在s1/s2/s3服务器上添加名为cdn.php的文件，内容如下： &#60;?php $path = $_GET&#91;&#34;name&#34;&#93;; $filename = md5&#40;$path&#41;; $file = &#34;save/&#34;.$filename.&#34;.data&#34;; if&#40;file_exists&#40;$file&#41;&#41;&#123; header&#40;'Content-type: '.mime_content_type&#40;$file&#41;&#41;; echo file_get_contents&#40;$file&#41;; &#125;else&#123; $content = file_get_contents&#40;&#34;http://source.ioio.name/upload/&#34;.$path&#41;; file_put_contents&#40;$file,$content&#41;; header&#40;'Content-type: '.mime_content_type&#40;$file&#41;&#41;; echo $content; &#125; ?&#62; 这段脚本会将读取到的文件存在本地的save文件夹里，需要save文件夹的读写权限。 2.配置.htaccess文件，添加一行记录： RewriteRule ^upload/(.*)$ /cdn.php?name=$1 [L] 这样配置后s1/s2/s3就能按照static的路径规则访问到相同的文件了。在实际的生成环境，可能会需要更复杂的cache策略，这里就不深入讨论。 -EOF- Related posts:万物皆缓存IIS 缓存问题Ubuntu 下字体的安装禁用Internet Explorer的DNS缓存利用 GAE同步更新饭否与TWITTER，建立你的HELLOTXTCopyright &#169; 2005~2011 &#124; Permalink &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>网站静态资源太多的情况下有时候我们需要分成多个域名来请求这些静态资源。<br />
如原来我们使用的</p>
<blockquote><p>http://static.ioio.name/upload/hello.jpg</p></blockquote>
<p>改成随机的使用</p>
<blockquote><p>http://s1.ioio.name/upload/hello.jpg</p>
<p>http://s2.ioio.name/upload/hello.jpg</p>
<p>http://s3.ioio.name/upload/hello.jpg</p></blockquote>
<p>这时候我们需要将s1/s2/s3服务器上的文件跟源服务器static同步。以使得他们都是访问的static上同名文件的拷贝。</p>
<p>这里我写了一段简单的php脚本采用溯源的策略来更新这些文件，当s1/s2/s3服务器上不存在该文件的时候，就向源服务器(static)请求该文件，并且保存在本地cache一份以便后续的相同请求使用。</p>
<p>1.在s1/s2/s3服务器上添加名为cdn.php的文件，内容如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$path</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$filename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;save/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$filename</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;.data&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: '</span><span style="color: #339933;">.</span><span style="color: #990000;">mime_content_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://source.ioio.name/upload/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: '</span><span style="color: #339933;">.</span><span style="color: #990000;">mime_content_type</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>这段脚本会将读取到的文件存在本地的save文件夹里，需要save文件夹的读写权限。</p>
<p>2.配置.htaccess文件，添加一行记录：</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteRule</span> ^upload/(.*)$ /cdn.php?name=$1 [L]</pre></div></div>

<p>这样配置后s1/s2/s3就能按照static的路径规则访问到相同的文件了。在实际的生成环境，可能会需要更复杂的cache策略，这里就不深入讨论。<br />
-EOF-</p>
<hr /><h2>Related posts:</h2><ul><li><a href="http://ioio.name/cache-everything.html" rel="bookmark" title="Permanent Link: 万物皆缓存">万物皆缓存</a></li><li><a href="http://ioio.name/iis-cache.html" rel="bookmark" title="Permanent Link: IIS 缓存问题">IIS 缓存问题</a></li><li><a href="http://ioio.name/ubuntu-fonts-install.html" rel="bookmark" title="Permanent Link: Ubuntu 下字体的安装">Ubuntu 下字体的安装</a></li><li><a href="http://ioio.name/disable-ie-dns-cache.html" rel="bookmark" title="Permanent Link: 禁用Internet Explorer的DNS缓存">禁用Internet Explorer的DNS缓存</a></li><li><a href="http://ioio.name/use-gae-update-twitter.html" rel="bookmark" title="Permanent Link: 利用 GAE同步更新饭否与TWITTER，建立你的HELLOTXT">利用 GAE同步更新饭否与TWITTER，建立你的HELLOTXT</a></li></ul><hr /><small>Copyright &copy; 2005~2011 | <a href="http://ioio.name/cdn-cache-redirect.html" title="Permalink">Permalink</a> | <a href="http://ioio.name/cdn-cache-redirect.html#comments">2 Comments</a> | <a href="http://closetou.com" title="Close To U">Close To U</a> <br />
<a href="http://feeds.feedburner.com/miss">订阅</a> <a href="https://twitter.com/tearnon">Twitter</a> <a href="http://ioio.name/godaddy">域名优惠码</a> <a href="http://ioio.name/mt">Media Temple空间</a>
<a href="http://mdiatemple.com/" title="Domain Sale! $6.89 .com at GoDaddy">主机/域名优惠码</a>
</small> )</small>
<p><a href="http://feedads.g.doubleclick.net/~a/a2hXgq0LeGhgN9S4U_WyTWLClOU/0/da"><img src="http://feedads.g.doubleclick.net/~a/a2hXgq0LeGhgN9S4U_WyTWLClOU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/a2hXgq0LeGhgN9S4U_WyTWLClOU/1/da"><img src="http://feedads.g.doubleclick.net/~a/a2hXgq0LeGhgN9S4U_WyTWLClOU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
			<wfw:commentRss>http://ioio.name/cdn-cache-redirect.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching 9/111 queries in 0.104 seconds using disk: basic
Object Caching 2578/2754 objects using disk: basic

Served from: ioio.name @ 2012-05-28 15:09:23 -->

