<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>芒果小站 &#187; JavaScript</title>
	<atom:link href="http://www.mangguo.org/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mangguo.org</link>
	<description>这里不卖芒果，请另寻他处购买。</description>
	<lastBuildDate>Wed, 08 Feb 2012 13:28:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>一道 JavaScript 填空题</title>
		<link>http://www.mangguo.org/a-javascript-fill-in-the-blank/</link>
		<comments>http://www.mangguo.org/a-javascript-fill-in-the-blank/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 04:55:51 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6573</guid>
		<description><![CDATA[填空，使后面的 alert(0) 能正确弹出，至少列举两种不同思路。 window.alert = function () {}; ______; alert(0); 解： 方法一： window.alert = function () {}; delete window.alert; alert(0); delete 操作符从入门到精通：https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete 有个值得注意的地方，文中提到了操作符的返回值时，描述如下： Returns false only if the property exists and cannot be deleted. It returns true in all other cases. 仅当属性存在并且不可被删除，则返回 false，否则一律返回 true 方法二： 创建一个 iframe ，获取 iframe 的 window.alert 给当前页面的 window.alert 推荐阅读莫名其妙的 JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>填空，使后面的 alert(0) 能正确弹出，至少列举两种不同思路。</p>
<pre>window.alert = function () {};
______;
alert(0);</pre>
<p>解：</p>
<p>方法一：</p>
<pre>window.alert = function () {};
delete window.alert;
alert(0);</pre>
<p>delete 操作符从入门到精通：https://developer.mozilla.org/en/<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span>/Reference/Operators/delete</p>
<p>有个值得注意的地方，文中提到了操作符的返回值时，描述如下：</p>
<pre>Returns false only if the property exists and cannot be deleted. It returns true in all other cases.</pre>
<p>仅当属性存在并且不可被删除，则返回 false，否则一律返回 true</p>
<p>方法二：<br />
创建一个 iframe ，获取 iframe 的 window.alert 给当前页面的 window.alert</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li><li><a href="http://www.mangguo.org/page-layout-and-code-logic-separation/" title="分离页面配置和代码逻辑">分离页面配置和代码逻辑</a> (3)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/">固定链接</a> | <a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/#comments">1 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/a-javascript-fill-in-the-blank/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>莫名其妙的 JavaScript 字符串换行</title>
		<link>http://www.mangguo.org/inexplicable-javascript-string-line/</link>
		<comments>http://www.mangguo.org/inexplicable-javascript-string-line/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 07:31:13 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6568</guid>
		<description><![CDATA[今儿个看蓝色理想的帖子，说到一个字符串换行的问题。通常如果在代码中存储 HTML 代码片段，会使用加号连接字符串的做法。 当然这样做会稍微麻烦点，于是有了以下这个生僻的方法： var foo = 'xxx\ xxx'; alert(foo) 结果弹的是： xxxxxx 再来加几个空格缩进看看： var foo = 'xxx\ xxx'; alert(foo) 结果弹的是： xxx xxx 那如果不折行呢？ var foo = 'xxx\xxx'; alert(foo) 结果报语法错误了： SyntaxError: malformed hexadecimal character escape sequence 事实上这个杠属 JavaScript 转义字符，使用 \ + 回车 相当于将字符串中的回车符转义，所以弹出的还是连缀的字符串。 考虑到 JS 代码部署时通常采用压缩，使用 \ 太危险，慎用。 字符串换行建议和常用的几种方法： 1、加号连接； 2、数据逐行 push，最终 join； 3、使用 script 标签存储 [...]]]></description>
			<content:encoded><![CDATA[<p>今儿个看蓝色理想的帖子，说到一个字符串换行的问题。通常如果在代码中存储 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 代码片段，会使用加号连接字符串的做法。</p>
<p>当然这样做会稍微麻烦点，于是有了以下这个生僻的方法：</p>
<pre>var foo = 'xxx\
xxx';
alert(foo)</pre>
<p>结果弹的是：</p>
<pre>xxxxxx</pre>
<p>再来加几个空格缩进看看：</p>
<pre>var foo = 'xxx\
    xxx';
alert(foo)</pre>
<p>结果弹的是：</p>
<pre>
xxx    xxx
</pre>
<p>那如果不折行呢？</p>
<pre>var foo = 'xxx\xxx';
alert(foo)</pre>
<p>结果报语法错误了：</p>
<pre>SyntaxError: malformed hexadecimal character escape sequence</pre>
<p>事实上这个杠属 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 转义字符，使用 <code>\ + 回车</code> 相当于将字符串中的回车符转义，所以弹出的还是连缀的字符串。</p>
<p>考虑到 JS 代码部署时通常采用压缩，使用 <code>\</code> 太危险，慎用。</p>
<p>字符串换行建议和常用的几种方法：<br />
1、加号连接；<br />
2、数据逐行 push，最终 join；<br />
3、使用 script 标签存储 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 片段</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li><li><a href="http://www.mangguo.org/page-layout-and-code-logic-separation/" title="分离页面配置和代码逻辑">分离页面配置和代码逻辑</a> (3)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/inexplicable-javascript-string-line/">固定链接</a> | <a href="http://www.mangguo.org/inexplicable-javascript-string-line/#comments">7 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/inexplicable-javascript-string-line/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>当前域的 JavaScript 条件判断</title>
		<link>http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/</link>
		<comments>http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 11:55:00 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6524</guid>
		<description><![CDATA[项目流程：测试环境（assets.daily.taobao.net）-&#62; 预发布环境（a.tbcdn.cn）切域名后需要手工修改 JS 中写死的文件路径。 //判断当前域是日常还是线上环境 if (location.host.indexOf('tbcdn.cn') !== -1) { var baseUrl = 'http://a.tbcdn.cn'; } else { var baseUrl = 'http://assets.daily.taobao.net'; } 推荐阅读一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)一段关于 JSONP Callback 的简要代码 (0)10+ 优化网站的 .htaccess 代码片段 (19)来自 Google 的编程风格指南 (10)JavaScript 原型继承之构造函数继承 (12)JavaScript 原型继承之基础机制 (7)分离页面配置和代码逻辑 (3) © 2010 芒果小站 &#124; 固定链接 &#124; 15 条评论 &#124; 标签 [...]]]></description>
			<content:encoded><![CDATA[<p>项目流程：测试环境（assets.daily.taobao.net）-&gt; 预发布环境（a.tbcdn.cn）切域名后需要手工修改 JS 中写死的文件路径。</p>
<pre>//判断当前域是日常还是线上环境
if (location.host.indexOf('tbcdn.cn') !== -1) {
	var baseUrl = 'http://a.tbcdn.cn';
} else {
	var baseUrl = 'http://assets.daily.taobao.net';
}</pre>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li><li><a href="http://www.mangguo.org/page-layout-and-code-logic-separation/" title="分离页面配置和代码逻辑">分离页面配置和代码逻辑</a> (3)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/">固定链接</a> | <a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/#comments">15 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>一段关于 JSONP Callback 的简要代码</title>
		<link>http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/</link>
		<comments>http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 09:54:00 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSONP]]></category>
		<category><![CDATA[KISSY]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6514</guid>
		<description><![CDATA[定义全局回调函数，把 timestamp 参数写成 window 下的方法名称。这里我的格式是 jsonp + 时间戳。发送请求和执行回调函数统一使用同一个 timestamp 参数即可。 /**   * 远程数据加载   * @method loader   * @param {String} o 参数配置   */ function loader (o) {      var timestamp = 'jsonp' + new Date().getTime(); //定义全局回调函数 window[timestamp] = function (data) { //执行配置参数中的回调函数 o.callback(data); }      //读取远程 JSONP 数据      KISSY.getScript(o.url + timestamp); [...]]]></description>
			<content:encoded><![CDATA[<p>定义全局回调函数，把 <code>timestamp</code> 参数写成 <code>window</code> 下的方法名称。这里我的格式是 jsonp + 时间戳。发送请求和执行回调函数统一使用同一个 <code>timestamp</code> 参数即可。</p>
<pre>/**
  * 远程数据加载
  * @method loader
  * @param {String} o 参数配置
  */
function loader (o) {

     var timestamp = 'jsonp' + new Date().getTime();

     //定义全局回调函数
     window[timestamp] = function (data) {

          //执行配置参数中的回调函数
          o.callback(data);

     }

     //读取远程 JSONP 数据
     KISSY.getScript(o.url + timestamp);

}</pre>
<p>执行加载时，调用 <code>loader</code> 方法：</p>
<pre>loader({
     url : 'http://ooxx.html?<span style="color: #ff0000;"><strong>callback=</strong></span>',
     callback : function (data) {
          console.log(data);
     }
})</pre>
<p>2011.12.15 日补充：全局 window 上的 callback 在请求成功后需要进行一次销毁操作。</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/kissy-pagination-logic-correct-page-template-components/" title="KISSY Pagination 翻页组件模版逻辑修正">KISSY Pagination 翻页组件模版逻辑修正</a> (0)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/">固定链接</a> | <a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/#comments">没有评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/jsonp/" rel="tag">JSONP</a>, <a href="http://www.mangguo.org/tag/kissy/" rel="tag">KISSY</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10+ 优化网站的 .htaccess 代码片段</title>
		<link>http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/</link>
		<comments>http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 05:36:54 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[代码]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6407</guid>
		<description><![CDATA[以下代码片段粘贴至根目录下的 .htaccess 文件，请记住修改前一定要备份该文件。 1、强制 URL 以斜杠结尾 在 URL 结束的位置如果加上斜杠（/），对 SEO 有很大帮助，这段代码将帮助你实现该功能： &#60;IfModule mod_rewrite.c&#62; RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] &#60;/IfModule&#62; 猛击这里查看详细情况：http://perishablepress.com/code-snippets/ 2、禁止图片盗链 盗链这种恶劣的行为通常大量地浪费服务器贷款。这段代码很实用，可以重定向盗链图片到一个指定的默认图（在第六行定义）： RewriteEngine On #Replace ?mysite\.com/ with your blog url RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mangguo\.org/ [NC] RewriteCond %{HTTP_REFERER} !^$ #Replace /images/nohotlink.jpg with your "don't hotlink" image url RewriteRule .*\.(jpe?g&#124;gif&#124;bmp&#124;png)$ /images/nohotlink.jpg [L] 猛击这里查看详细情况：.htaccess 设置图片防盗链 3、重定向移动客户端访问 如果站点没有使用设备自适应的设计方案，这段代码可以帮助你将网站重定向到移动版本： [...]]]></description>
			<content:encoded><![CDATA[<p>以下代码片段粘贴至根目录下的 .htaccess 文件，请记住修改前一定要备份该文件。<strong></strong></p>
<h3>1、强制 URL 以斜杠结尾</h3>
<p>在 URL 结束的位置如果加上斜杠（/），对 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/seo">SEO</a></span> 有很大帮助，这段代码将帮助你实现该功能：</p>
<pre>&lt;IfModule mod_rewrite.c&gt;
 RewriteCond %{REQUEST_URI} /+[^\.]+$
 RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
&lt;/IfModule&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://perishablepress.com/code-snippets/" target="_blank">http://perishablepress.com/code-snippets/</a></strong></p>
<h3>2、禁止图片盗链</h3>
<p>盗链这种恶劣的行为通常大量地浪费服务器贷款。这段代码很实用，可以重定向盗链图片到一个指定的默认图（在第六行定义）：</p>
<pre>RewriteEngine On
#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mangguo\.org/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]</pre>
<p><strong>猛击这里查看详细情况：<a href="http://www.mangguo.org/htaccess-setup-picture-anti-leech/" target="_blank">.htaccess 设置图片防盗链</a></strong></p>
<h3>3、重定向移动客户端访问</h3>
<p>如果站点没有使用设备自适应的设计方案，这段代码可以帮助你将网站重定向到移动版本：</p>
<pre>RewriteEngine On
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT}  "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]
#------------- The line below excludes the iPad
RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$
#-------------
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC] #*SEE NOTE BELOW
RewriteRule ^(.*)$ /m/ [L,R=302]</pre>
<p><strong>猛击这里查看详细情况：<a href="http://snipplr.com/view.php?codeview&amp;id=55114" target="_blank">http://snipplr.com/view.php?codeview&amp;id=55114</a></strong></p>
<h3>4、强制下载某一格式的文件</h3>
<p>处于某些原因，需要使得某些文件访问时直接提示用户下载保存，例如 MP3、Office 文档等。这段代码可以轻松搞定：</p>
<pre>&lt;Files *.xls&gt;
  ForceType application/octet-stream
  Header set Content-Disposition attachment
&lt;/Files&gt;
&lt;Files *.eps&gt;
  ForceType application/octet-stream
  Header set Content-Disposition attachment
&lt;/Files&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://www.mangguo.org/7-super-useful-php-snippets/" target="_blank">强制下载文件</a></strong></p>
<h3>5、<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/firefox">Firefox</a></span> 跨域字体嵌入</h3>
<p>当嵌入字体时，<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/firefox">Firefox</a></span> 不允许从外部网站调用。使用 .htaccess 代码可以突破这个限制：</p>
<pre>&lt;FilesMatch "\.(ttf|otf|eot|woff)$"&gt;
&lt;IfModule mod_headers.c&gt;
    Header set Access-Control-Allow-Origin "http://www.mangguo.org"
&lt;/IfModule&gt;
&lt;/FilesMatch&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://snipplr.com/view/53703" target="_blank">http://snipplr.com/view/53703</a></strong></p>
<h3>6、使用 .htaccess 缓存加速网站</h3>
<p>这份代码也许是整篇中最有用的。使用以下代码可以显著提升网站速度，值得收藏的好代码啊！</p>
<pre># 1 YEAR
&lt;FilesMatch "\.(ico|pdf|flv)$"&gt;
Header set Cache-Control "max-age=29030400, public"
&lt;/FilesMatch&gt;
# 1 WEEK
&lt;FilesMatch "\.(jpg|jpeg|png|gif|swf)$"&gt;
Header set Cache-Control "max-age=604800, public"
&lt;/FilesMatch&gt;
# 2 DAYS
&lt;FilesMatch "\.(xml|txt|css|js)$"&gt;
Header set Cache-Control "max-age=172800, proxy-revalidate"
&lt;/FilesMatch&gt;
# 1 MIN
&lt;FilesMatch "\.(html|htm|php)$"&gt;
Header set Cache-Control "max-age=60, private, proxy-revalidate"
&lt;/FilesMatch&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html" target="_blank">http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html</a></strong></p>
<h3>7、阻止 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/wordpress">WordPress</a></span> 博客中的垃圾评论</h3>
<p>在为你博客的垃圾评论头痛？当然 Akismet 很有用，但一旦 Akismet 挂了，.htaccess 就能凑效了：</p>
<pre>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*mangguo.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
&lt;/IfModule&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://www.mangguo.org/use-htaccess-reduce-wordpress-comment-spam/" target="_blank">使用 .htaccess 减少 WordPress 垃圾评论</a></strong></p>
<h3>8、重定向 RSS 源到单一格式</h3>
<p>以前 RSS，Atom 或者 Rdf 经常被使用。而现在貌似 RSS 是最为流行的。这段代码允许你把所有的订阅源格式重定向到某个单一源，<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/wordpress">WordPress</a></span> 同样适用。</p>
<pre>&lt;IfModule mod_alias.c&gt;
 RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://example.com/feed/
 RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://example.com/comments/feed/
&lt;/IfModule&gt;</pre>
<p><strong>猛击这里查看详细情况：<a href="http://www.wprecipes.com/redirect-feeds-to-a-single-format" target="_blank">http://www.wprecipes.com/redirect-feeds-to-a-single-format</a></strong></p>
<h3>9、配置网站的 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html5">HTML5</a></span> 视频媒体类型</h3>
<p><span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html5">HTML5</a></span> 技术为网站开发带来了很多令人振奋的选择，在众多炫酷的特性里，一个重要的地方是使用了 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html5">HTML5</a></span> 视频代替了 Flash 技术。现在可以直接在网页中播放 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html5">HTML5</a></span> 视频，但在此之前，你需要配置服务器来让它更好地支持：</p>
<pre>RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType application/x-shockwave-flash swf</pre>
<p><strong>猛击这里查看详细情况：<a href="http://snipplr.com/view.php?codeview&amp;id=53437" target="_blank">http://snipplr.com/view.php?codeview&amp;id=53437</a></strong></p>
<h3>10、记录 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 错误</h3>
<p>和通常在页面中显示 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 运行错误的方式不同，这段代码将会把日志写入 .log 文件，避免直接在页面中暴露错误：</p>
<pre># display no errs to user
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# log to file
php_flag log_errors on
php_value error_log /location/to/php_error.log</pre>
<p><strong>猛击这里查看详细情况：<a href="http://css-tricks.com/snippets/htaccess/php-error-logging/" target="_blank">http://css-tricks.com/snippets/htaccess/php-error-logging/</a></strong></p>
<h3>11、在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 文件中运行 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 代码</h3>
<p>编写 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 代码时，如果能在 JS 文件中使用 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 那就牛逼哄哄了，比如直接从数据库获取数据，以下是一个在 JS 文件中使用 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 的示例：</p>
<pre>AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js

&lt;FilesMatch "\.(js|php)$"&gt;
SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;</pre>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/" title="程序员从入门到精通：芒果教你画小鸡">程序员从入门到精通：芒果教你画小鸡</a> (21)</li><li><a href="http://www.mangguo.org/pure-html-clocks-using-javascript-css-rotation/" title="使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟">使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟</a> (2)</li><li><a href="http://www.mangguo.org/use-javascript-achieve-html-code-run-frame/" title="用 JavaScript 实现 HTML 代码运行框">用 JavaScript 实现 HTML 代码运行框</a> (2)</li><li><a href="http://www.mangguo.org/the-simple-php-cache-class/" title="简单至极的 PHP 缓存类">简单至极的 PHP 缓存类</a> (0)</li><li><a href="http://www.mangguo.org/in-php-a-double-quotes-and-the-single-quotes/" title="PHP 中的双引号和单引号">PHP 中的双引号和单引号</a> (3)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/">固定链接</a> | <a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/#comments">19 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/htaccess/" rel="tag">.htaccess</a>, <a href="http://www.mangguo.org/tag/html/" rel="tag">HTML</a>, <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/php/" rel="tag">PHP</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>来自 Google 的编程风格指南</title>
		<link>http://www.mangguo.org/google-styleguide-manual/</link>
		<comments>http://www.mangguo.org/google-styleguide-manual/#comments</comments>
		<pubDate>Wed, 21 Sep 2011 03:32:36 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6332</guid>
		<description><![CDATA[一份来自 Google 的编程风格指南，存到了芒果小站的服务器上，简单做了文档索引，以备不时之需。 Google JavaScript Style Guide http://google-styleguide.mangguo.org/javascriptguide.xml Google JSON Style Guide http://google-styleguide.mangguo.org/jsoncstyleguide.xml Google XML Document Format Style Guide http://google-styleguide.mangguo.org/xmlstyle.html Google Python Style Guide http://google-styleguide.mangguo.org/pyguide.html Google Objective-C Style Guide http://google-styleguide.mangguo.org/objcguide.xml Google C++ Style Guide http://google-styleguide.mangguo.org/cppguide.xml 推荐阅读一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)当前域的 JavaScript 条件判断 (15)一段关于 JSONP Callback 的简要代码 (0)10+ 优化网站的 .htaccess 代码片段 (19)PHP 输出中文 JSON [...]]]></description>
			<content:encoded><![CDATA[<p>一份来自 Google 的编程风格指南，存到了芒果小站的服务器上，简单做了文档索引，以备不时之需。</p>
<p><strong>Google <span style="color: #ff0000;"><span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span></span> Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/javascriptguide.xml" target="_blank">http://google-styleguide.mangguo.org/javascriptguide.xml</a></p>
<p><strong>Google <span style="color: #ff0000;">JSON</span> Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/jsoncstyleguide.xml" target="_blank">http://google-styleguide.mangguo.org/jsoncstyleguide.xml</a></p>
<p><strong>Google <span style="color: #ff0000;">XML</span> Document Format Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/xmlstyle.html" target="_blank">http://google-styleguide.mangguo.org/xmlstyle.html</a></p>
<p><strong>Google <span style="color: #ff0000;">Python</span> Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/pyguide.html" target="_blank">http://google-styleguide.mangguo.org/pyguide.html</a></p>
<p><strong>Google <span style="color: #ff0000;">Objective-C</span> Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/objcguide.xml" target="_blank">http://google-styleguide.mangguo.org/objcguide.xml</a></p>
<p><strong>Google <span style="color: #ff0000;">C++</span> Style Guide</strong><br />
<a href="http://google-styleguide.mangguo.org/cppguide.xml" target="_blank">http://google-styleguide.mangguo.org/cppguide.xml</a></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/php-json-output-string-chinese/" title="PHP 输出中文 JSON 字符串">PHP 输出中文 JSON 字符串</a> (6)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/google-styleguide-manual/">固定链接</a> | <a href="http://www.mangguo.org/google-styleguide-manual/#comments">10 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/json/" rel="tag">JSON</a>, <a href="http://www.mangguo.org/tag/objective-c/" rel="tag">Objective-C</a>, <a href="http://www.mangguo.org/tag/python/" rel="tag">Python</a>, <a href="http://www.mangguo.org/tag/xml/" rel="tag">XML</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/google-styleguide-manual/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>JavaScript 原型继承之构造函数继承</title>
		<link>http://www.mangguo.org/javascript-prototype-constructor-inheritance/</link>
		<comments>http://www.mangguo.org/javascript-prototype-constructor-inheritance/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 04:49:20 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Prototype]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6205</guid>
		<description><![CDATA[上回说到《JavaScript 原型继承之基础机制》，这一篇将具体说说构造函数的继承。 从一个简单的示例开始，创建描述人类的 People 构造函数： function People(){ this.race = '愚蠢的人类'; } 然后，创建描述黄种人的 Yellow 构造函数： function Yellow(name, skin){ this.name = name; this.skin = skin; } 要使得黄种人 Yellow 能继承人类 People 对象，在 JavaScript 中可以通过多种方式模拟实现。 1、对象冒充（Object Masquerading） 对象冒充，简单地说就是把一个定义抽象类的构造函数当作常规函数使用，实现伪继承： function Yellow(name, skin) { this._extend = People; this._extend(); delete this._extend; //删除对 People 的引用 this.name = name; this.skin = skin; } //实例化 [...]]]></description>
			<content:encoded><![CDATA[<p>上回说到《<a href="../javascript-prototype-inheritance-basic-mechanisms/">JavaScript 原型继承之基础机制</a>》，这一篇将具体说说构造函数的继承。<br />
从一个简单的示例开始，创建描述人类的 <code>People</code> 构造函数：</p>
<pre>function People(){
    this.race = '愚蠢的人类';
}</pre>
<p>然后，创建描述黄种人的 <code>Yellow</code> 构造函数：</p>
<pre>
function Yellow(name, skin){
    this.name = name;
    this.skin = skin;
}</pre>
<p>要使得黄种人 <code>Yellow</code> 能继承人类 <code>People</code> 对象，在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 中可以通过多种方式模拟实现。</p>
<h3>1、对象冒充（<code>Object Masquerading</code>）</h3>
<p>对象冒充，简单地说就是把一个定义抽象类的构造函数当作常规函数使用，实现伪继承：</p>
<pre>function Yellow(name, skin) {
<strong>    this._extend = People;
    this._extend();
    delete this._extend;</strong> //删除对 People 的引用
    this.name = name;
    this.skin = skin;
}
//实例化 yellow1
var yellow1 = new Yellow('小明', '黄皮肤');
console.log(yellow1.name); //小明
console.log(yellow1.race); //愚蠢的人类</pre>
<p>在这段代码中，为 <code>Yellow</code> 添加私有方法 <code>_extend</code>，由于函数本身只是以引用的形式存在，执行时会自动调用 <code>People</code> 方法，并传入 <code>Yellow</code> 构造函数的 <code>name</code> 参数。而 <code>Yellow</code> 对象的自身属性和方法，必须在上述过程结束，清空对外部方法的引用后再进行定义。</p>
<p><em>注：通过对象冒充可以实现多重继承</em></p>
<h3>2、call / apply 方法</h3>
<p>通过 call / apply 方法实现继承可能更为简单，不需要任何繁琐的操作：</p>
<pre>function Yellow(name, skin) {
    <strong>People.apply(this, arguments);</strong>
    this.name = name;
    this.skin = skin;
}
//实例化 yellow2
var yellow2 = new Yellow('大卫', '黑皮肤')
console.log(yellow2.name); //大卫
console.log(yellow2.race); //愚蠢的人类</pre>
<p>这里为 <code>apply</code> 传入 <code>arguments</code> 数组，也可以使用 <code>new Array</code> 或字面量数组。</p>
<h3>3、原型链（Prototype Chaining）</h3>
<p>第一种原型继承方法是把对象的原型指向父类的某个实例：</p>
<pre>Yellow.prototype = new People();
<strong>Yellow.prototype.constructor = Yellow;</strong> //初始的 prototype 被完全清空，所以最好将 constructor 重置
var yellow3 = new Yellow('小王', '黄皮肤');
console.log(yellow3.race); //愚蠢的人类</pre>
<p>以上代码可以这样反向理解，<code>yellow3</code> 实例本身找不到 <code>race</code> 属性，而它原型上的 <code>race</code> 属性又恰好是 <code>People</code> 对象的实例的 <code>race</code> 属性。</p>
<p>如果对于 <code>People</code> 对象来说，其属性写入了原型中，则无需实例化，只需将 <code>Yellow</code> 的 <code>prototype</code> 属性指向 <code>People</code> 的 <code>prototype</code> 属性：</p>
<pre>function People(){};
People.prototype.race = '愚蠢的人类';
Yellow.prototype = People.prototype;
<strong>Yellow.prototype.constructor = Yellow;</strong></pre>
<p>这样做不进行实例化操作，只是指针的改变，非常环保。但由于引用类型的关系，<code>Yellow</code> 和 <code>People</code> 指向了同一个原型对象，也就是说对 <code>Yellow.prototype.constructor</code> 的修改实际上破坏了 <code>People</code> 的原型对象。</p>
<p>既然如此，可以借助一个空的中继对象，绕过父类的原型：</p>
<pre>var F = function(){};
F.prototype = People.prototype;
Yellow.prototype = new F();
Yellow.prototype.constructor = Yellow;
</pre>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/page-layout-and-code-logic-separation/" title="分离页面配置和代码逻辑">分离页面配置和代码逻辑</a> (3)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/">固定链接</a> | <a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/#comments">12 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/prototype/" rel="tag">Prototype</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/javascript-prototype-constructor-inheritance/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>JavaScript 原型继承之基础机制</title>
		<link>http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/</link>
		<comments>http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 04:41:27 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Prototype]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6201</guid>
		<description><![CDATA[由于语言设计上的原因，JavaScript 没有真正意义上“类”的概念。而通常使用的 new 命令实例化对象的方法，其实是对原型对象的实例化。这一语言功能的本质依赖于 JavaScript 特有的原型链（prototype chain）模式。 所以严格意义上说，JavaScript 是基于原型的面向对象语言。也就是说，每个实例对象都具有一个原型。对象从该原型中继承属性和方法。 1、构造函数 利用构造函数，可以简单地创建对象。构造函数内的 this 关键字指向实例对象本身： function People(name){ this.name = name; } 使用 new 运算符和构造函数创建实例对象： var people = new People('小明'); console.log(people.name); //小明 但如果创建了两个实例，这两个实例之间无法直接共享属性和方法： var people1 = new People('小明'); var people2 = new People('小王'); people1.sex = 'male'; console.log(people2.sex); //undefined 也就是说对象一旦被实例化，其属性方法都独立存在，对某个属性的修改不会影响到其他实例。 2、Prototype 于是就有了 prototype 属性，这个属性是在生成实例对象时自动创建的。它本身又是一个对象，拥有能够在实例间共享的属性和方法。而实例本身的属性和方法，则包含在构造函数中。换句话说，构造函数内部的属性和方法，在经过实例化后都成为了本地的属性和方法，而原型（prototype）中的属性和方法在实例中只是一种引用，因此能够被多个实例共享。 还是刚才那个构造函数，现在为它增加 prototype 属性： People.prototype.sex = [...]]]></description>
			<content:encoded><![CDATA[<p>由于语言设计上的原因，<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 没有真正意义上“类”的概念。而通常使用的 <code>new</code> 命令实例化对象的方法，其实是对原型对象的实例化。这一语言功能的本质依赖于 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 特有的原型链（<code>prototype chain</code>）模式。</p>
<p>所以严格意义上说，<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 是基于原型的面向对象语言。也就是说，每个实例对象都具有一个原型。对象从该原型中继承属性和方法。</p>
<h3>1、构造函数</h3>
<p>利用构造函数，可以简单地创建对象。构造函数内的 <code>this</code> 关键字指向实例对象本身：</p>
<pre>function People(name){
    this.name = name;
}</pre>
<p>使用 <code>new</code> 运算符和构造函数创建实例对象：</p>
<pre>var people = new People('小明');
console.log(people.name); //小明</pre>
<p>但如果创建了两个实例，这两个实例之间无法直接共享属性和方法：</p>
<pre>var people1 = new People('小明');
var people2 = new People('小王');
people1.sex = 'male';
console.log(people2.sex); //undefined</pre>
<p>也就是说对象一旦被实例化，其属性方法都独立存在，对某个属性的修改不会影响到其他实例。</p>
<h3>2、Prototype</h3>
<p>于是就有了 <code>prototype</code> 属性，这个属性是在生成实例对象时自动创建的。它本身又是一个对象，拥有能够在实例间共享的属性和方法。而实例本身的属性和方法，则包含在构造函数中。换句话说，构造函数内部的属性和方法，在经过实例化后都成为了本地的属性和方法，而原型（<code>prototype</code>）中的属性和方法在实例中只是一种引用，因此能够被多个实例共享。</p>
<p>还是刚才那个构造函数，现在为它增加 <code>prototype</code> 属性：</p>
<pre>People.prototype.sex = 'female';
//或者写成 People.prototype = {sex: 'female'};
console.log(people1.sex); //male
console.log(people2.sex); //female</pre>
<p>People 构造函数的 <code>prototype</code> 属性参数会直接影响到 <code>people1</code> 和 <code>people2</code> 两个实例。</p>
<p>但为什么 <code>people1.sex</code> 输出 <code>male</code> 呢？这是由于在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 中，原型关系以递归形式存在。对象的原型也是一个对象，而原型的本身也可能具有一个原型。原型的最高层级是全局的 Object 对象。</p>
<p>这就是说，一旦 <code>people1.sex</code> 被设置为 <code>male</code> 后，它在原型中对应的值就无法被暴露出来。假如 <code>people1.sex</code> 本身没有值，才会从构造函数的 <code>prototype</code> 属性中读取，以此类推一级一级向上查找，直到 Object 对象。</p>
<p><em>注：使用 <code>“null”</code> 给对象赋值，可以销毁自定义对象，释放内存资源。</em></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/page-layout-and-code-logic-separation/" title="分离页面配置和代码逻辑">分离页面配置和代码逻辑</a> (3)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/">固定链接</a> | <a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/#comments">7 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/prototype/" rel="tag">Prototype</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>分离页面配置和代码逻辑</title>
		<link>http://www.mangguo.org/page-layout-and-code-logic-separation/</link>
		<comments>http://www.mangguo.org/page-layout-and-code-logic-separation/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 03:37:50 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6193</guid>
		<description><![CDATA[为了代码清晰结构性强，通常需要分离页面配置参数和代码逻辑。约定唯一的命名空间，实现基本的所谓结构和行为分离。 第一种方式，提供一个暴露在 window 的全局对象，这里是 TB 变量。然后所有的代码被封装在该全局对象下。 // 创建命名空间 var TB = {}; /** * 定义初始化入口函数 * @method init * @param {JSON} config 页面配置参数 */ TB.init = function(config){ console.log(config.demo); } // 页面配置参数的初始化 TB.init({ demo: 'http://demo.mangguo.org' }); 或者，匿名函数模式，把参数传给匿名函数，并局限在该函数体内部。隔离作用域链，所谓闭包。 /** * 定义匿名函数 * @param {JSON} config 页面配置参数 */ (function(config){ console.log(config.demo); })({ demo : 'http://demo.mangguo.org' }); 第一种可能更适合于组织复杂代码，模块化，颗粒化。 推荐阅读一道 JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>为了代码清晰结构性强，通常需要分离页面配置参数和代码逻辑。约定唯一的命名空间，实现基本的所谓结构和行为分离。</p>
<p>第一种方式，提供一个暴露在 <code>window</code> 的全局对象，这里是 TB 变量。然后所有的代码被封装在该全局对象下。</p>
<pre>// 创建命名空间
var TB = {};

/**
 * 定义初始化入口函数
 * @method init
 * @param {JSON} config 页面配置参数
 */
TB.init = function(config){

	console.log(config.demo);

}

// 页面配置参数的初始化
TB.init({

    demo: 'http://demo.mangguo.org'

});</pre>
<p>或者，匿名函数模式，把参数传给匿名函数，并局限在该函数体内部。隔离作用域链，所谓闭包。</p>
<pre>/**
 * 定义匿名函数
 * @param {JSON} config 页面配置参数
 */
(function(config){

	console.log(config.demo);

})({
	demo : 'http://demo.mangguo.org'
});</pre>
<p>第一种可能更适合于组织复杂代码，模块化，颗粒化。</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/page-layout-and-code-logic-separation/">固定链接</a> | <a href="http://www.mangguo.org/page-layout-and-code-logic-separation/#comments">3 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/page-layout-and-code-logic-separation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>招募几只前端开发攻城师</title>
		<link>http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/</link>
		<comments>http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 08:27:25 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[杂项]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mangguo]]></category>
		<category><![CDATA[Taobao]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6181</guid>
		<description><![CDATA[看过很多招聘信息，内容大概都差不多，要求无非技能、工作经验等方面，看多了就有点疲劳。 当然这些都不是硬性条件，我始终觉得评判一个人的标准是很难被标准化的。标准是用来“仅供参考”的，即使是你技不如人，如果有强烈的进入这行的意愿，试试也无妨。 现招募几只前端开发工程师，装逼一点的应该称之为 Frontend Developer，基本要求如下： 1、视前端为职业发展方向，并真正热爱这一份工作，热爱互联网； 2、精通各种前端技术，包括 HTML/CSS/Javascript 等，如果了解 HTML5 并能够实际应用，这会为你增色不少； 3、深刻理解 Web 标准，对可用性、可访问性等相关知识有实际的了解和实践经验； 4、熟悉一种非前端脚本语言，如 PHP 等，这会为你今后的工作带来便捷； 5、个性乐观开朗，善于沟通，逻辑性强； 6、专业不限，男女不限，简历体裁不限，字数不得多于 800 字； 工作地点在杭州，不过距离不是问题嘛。当年哥横跨大半个中国来实习的，一切也都顺利。欢迎广大大四在读的孩纸们加入我们的团队哦。 简历请发送至：bangyan#taobao.com，主题注明“应聘”。谢谢！ 推荐阅读程序员从入门到精通：芒果教你画小鸡 (21)一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)分享 5 个淘宝指数邀请码 (6)当前域的 JavaScript 条件判断 (15)一段关于 JSONP Callback 的简要代码 (0)10+ 优化网站的 .htaccess 代码片段 (19)来自 Google 的编程风格指南 (10) © 2010 芒果小站 &#124; 固定链接 &#124; 72 [...]]]></description>
			<content:encoded><![CDATA[<p>看过很多招聘信息，内容大概都差不多，要求无非技能、工作经验等方面，看多了就有点疲劳。</p>
<p>当然这些都不是硬性条件，我始终觉得评判一个人的标准是很难被标准化的。标准是用来“仅供参考”的，即使是你技不如人，如果有强烈的进入这行的意愿，试试也无妨。</p>
<p>现招募几只<strong>前端开发工程师</strong>，装逼一点的应该称之为 Frontend Developer，基本要求如下：</p>
<pre>1、视前端为职业发展方向，并真正热爱这一份工作，热爱互联网；
2、精通各种前端技术，包括 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span>/<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/css">CSS</a></span>/Javascript 等，如果了解 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html5">HTML5</a></span> 并能够实际应用，这会为你增色不少；
3、深刻理解 Web 标准，对可用性、可访问性等相关知识有实际的了解和实践经验；
4、熟悉一种<strong>非</strong>前端脚本语言，如 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span> 等，这会为你今后的工作带来便捷；
5、个性乐观开朗，善于沟通，逻辑性强；
6、专业不限，男女不限，简历体裁不限，字数不得多于 800 字；</pre>
<p>工作地点在杭州，不过距离不是问题嘛。当年哥横跨大半个中国来实习的，一切也都顺利。欢迎广大<strong>大四在读</strong>的孩纸们加入我们的团队哦。</p>
<p>简历请发送至：<code>bangyan#taobao.com</code>，主题注明“应聘”。谢谢！</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/" title="程序员从入门到精通：芒果教你画小鸡">程序员从入门到精通：芒果教你画小鸡</a> (21)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/share-5-taobao-index-invitation-code/" title="分享 5 个淘宝指数邀请码">分享 5 个淘宝指数邀请码</a> (6)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/">固定链接</a> | <a href="http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/#comments">72 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/mangguo/" rel="tag">mangguo</a>, <a href="http://www.mangguo.org/tag/taobao/" rel="tag">Taobao</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/feed/</wfw:commentRss>
		<slash:comments>72</slash:comments>
		</item>
		<item>
		<title>程序员从入门到精通：芒果教你画小鸡</title>
		<link>http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/</link>
		<comments>http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 15:54:59 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[杂项]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mangguo]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=6172</guid>
		<description><![CDATA[作为一个牛逼的程序员，不在工作中找点乐趣，那只能算是入门。想要到达精通的境界，就必需多看看诸如《21 天学通 PHP》、《零基础学 JavaScript》、《Visual Basic 从入门到精通》之类的书籍。看完这些好书，你就能像我一样，画出一只栩栩如生的小鸡。 推荐阅读10+ 优化网站的 .htaccess 代码片段 (19)招募几只前端开发攻城师 (72)简单至极的 PHP 缓存类 (0)PHP 中的双引号和单引号 (3)一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)当前域的 JavaScript 条件判断 (15)16 进制颜色转换为 RGB 色值 (2) © 2010 芒果小站 &#124; 固定链接 &#124; 21 条评论 &#124; 标签 JavaScript, mangguo, PHP]]></description>
			<content:encoded><![CDATA[<p>作为一个牛逼的程序员，不在工作中找点乐趣，那只能算是入门。想要到达精通的境界，就必需多看看诸如《21 天学通 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/php">PHP</a></span>》、《零基础学 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span>》、《Visual Basic 从入门到精通》之类的书籍。看完这些好书，你就能像我一样，画出一只栩栩如生的小鸡。</p>
<p><img class="alignnone size-full wp-image-6173" title="20110728170554" src="http://www.mangguo.org/wp-content/uploads/2011/07/20110728170554.png" alt="" width="683" height="442" /></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/recruitment-of-a-few-front-end-development-engineer/" title="招募几只前端开发攻城师">招募几只前端开发攻城师</a> (72)</li><li><a href="http://www.mangguo.org/the-simple-php-cache-class/" title="简单至极的 PHP 缓存类">简单至极的 PHP 缓存类</a> (0)</li><li><a href="http://www.mangguo.org/in-php-a-double-quotes-and-the-single-quotes/" title="PHP 中的双引号和单引号">PHP 中的双引号和单引号</a> (3)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/php-hex-color-to-rgb-color/" title="16 进制颜色转换为 RGB 色值">16 进制颜色转换为 RGB 色值</a> (2)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/">固定链接</a> | <a href="http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/#comments">21 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/mangguo/" rel="tag">mangguo</a>, <a href="http://www.mangguo.org/tag/php/" rel="tag">PHP</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/from-the-entry-to-the-master-programmer-mango-chicken-teach-you-draw/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>快点，把锚点干掉！</title>
		<link>http://www.mangguo.org/quick-remove-the-anchor/</link>
		<comments>http://www.mangguo.org/quick-remove-the-anchor/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 13:11:44 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5921</guid>
		<description><![CDATA[前端的童鞋们肯定觉得 a 标签屡试不爽，却又不能丢失了 href="#"，那就快点把锚点干掉！ 你可以这样搞： &#60;a href="javascript:void(0);"&#62;这是一个连接&#60;/a&#62; 你也可以这样搞： &#60;a href="javascript:;"&#62;这还是一个连接&#60;/a&#62; 我说完了。 推荐阅读一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)当前域的 JavaScript 条件判断 (15)一段关于 JSONP Callback 的简要代码 (0)10+ 优化网站的 .htaccess 代码片段 (19)来自 Google 的编程风格指南 (10)JavaScript 原型继承之构造函数继承 (12)JavaScript 原型继承之基础机制 (7) © 2010 芒果小站 &#124; 固定链接 &#124; 24 条评论 &#124; 标签 JavaScript]]></description>
			<content:encoded><![CDATA[<p>前端的童鞋们肯定觉得 <code>a</code> 标签屡试不爽，却又不能丢失了 <code>href="#"</code>，那就快点把锚点干掉！</p>
<p>你可以这样搞：</p>
<pre>&lt;a href="javascript:void(0);"&gt;这是一个连接&lt;/a&gt;</pre>
<p>你也可以这样搞：</p>
<pre>&lt;a href="javascript:;"&gt;这还是一个连接&lt;/a&gt;</pre>
<p>我说完了。</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/quick-remove-the-anchor/">固定链接</a> | <a href="http://www.mangguo.org/quick-remove-the-anchor/#comments">24 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/quick-remove-the-anchor/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>你真的认识 window.location 吗？</title>
		<link>http://www.mangguo.org/do-you-really-know-window-location/</link>
		<comments>http://www.mangguo.org/do-you-really-know-window-location/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 03:52:47 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[window.location]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5602</guid>
		<description><![CDATA[如果你稍微懂一些 JS 代码，一般都会知道 window.location.href 这个属性。并且用该属性获取页面 URL 地址： window.location.href = window.location.href; 好吧，我告诉你，这样弱掉了。其实原生 JavaScript 真是什么都有。 window.location 对象所包含的属性 属性 描述 hash 从井号 (#) 开始的 URL（锚） host 主机名和当前 URL 的端口号 hostname 当前 URL 的主机名 href 完整的 URL pathname 当前 URL 的路径部分 port 当前 URL 的端口号 protocol 当前 URL 的协议 search 从问号 (?) 开始的 URL（查询部分） 以芒果小站为例，用 window.location.href 获得某个页面参数，得到如下结果： window.location.hash 要使用 [...]]]></description>
			<content:encoded><![CDATA[<p>如果你稍微懂一些 JS 代码，一般都会知道 <code>window.location.href</code> 这个属性。并且用该属性获取页面 URL 地址：</p>
<pre>window.location.href = window.location.href;</pre>
<p>好吧，我告诉你，这样弱掉了。其实原生 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 真是什么都有。</p>
<h3>window.location 对象所包含的属性</h3>
<table>
<tbody>
<tr>
<th>属性</th>
<th>描述</th>
</tr>
<tr>
<td>hash</td>
<td>从井号 (#) 开始的 URL（锚）</td>
</tr>
<tr>
<td>host</td>
<td>主机名和当前 URL 的端口号</td>
</tr>
<tr>
<td>hostname</td>
<td>当前 URL 的主机名</td>
</tr>
<tr>
<td>href</td>
<td>完整的 URL</td>
</tr>
<tr>
<td>pathname</td>
<td>当前 URL 的路径部分</td>
</tr>
<tr>
<td>port</td>
<td>当前 URL 的端口号</td>
</tr>
<tr>
<td>protocol</td>
<td>当前 URL 的协议</td>
</tr>
<tr>
<td>search</td>
<td>从问号 (?) 开始的 URL（查询部分）</td>
</tr>
</tbody>
</table>
<p>以芒果小站为例，用 <code>window.location.href</code> 获得某个页面参数，得到如下结果：</p>
<p><img class="alignnone size-full wp-image-5611" title="20110429232013" src="http://www.mangguo.org/wp-content/uploads/2011/04/20110429232013.png" alt="" width="586" height="185" /></p>
<h4>window.location.hash</h4>
<p>要使用 JS 定位锚点，完全可以使用 <code>window.hash</code> 配合元素 ID 完成。比如快速定位到页面的某条评论，则直接使用如下代码即可：</p>
<pre>window.location.hash = "#comment-5981";</pre>
<p>另外 Twitter、Facebook、Google 等已经开始大量使用 <code>#!</code> 这种形式的 hash 方法处理异步交互页面的 URL 可回溯功能。</p>
<h4>window.location.search</h4>
<p>如果有这样一个 URL 地址：</p>
<pre>http://www.google.com.hk/search?hl=zh-CN&amp;source=hp&amp;biw=1400&amp;bih=935&amp;q=%E8%8A%92%E6%9E%9C%E5%B0%8F%E7%AB%99&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=</pre>
<p>如何利用 JS 脚本捕获页面 GET 方式请求的参数？其实直接使用 <code>window.location.search</code> 获得，然后通过 split 方法结合循环遍历自由组织数据格式。</p>
<p>另外，如果根据用户的搜索条件刷新页面，只需直接设置 <code>window.location.search</code> 即可。</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/do-you-really-know-window-location/">固定链接</a> | <a href="http://www.mangguo.org/do-you-really-know-window-location/#comments">8 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/window-location/" rel="tag">window.location</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/do-you-really-know-window-location/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>JavaScript for&#8230;in 循环的陷阱</title>
		<link>http://www.mangguo.org/javascript-for-in-loop-trap/</link>
		<comments>http://www.mangguo.org/javascript-for-in-loop-trap/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 05:18:53 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[for...in]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5465</guid>
		<description><![CDATA[For&#8230;In 声明用于遍历数组或者对象的属性（对数组或者对象的属性进行循环操作）。 先定义一个构造函数： var Status = function(arg){ this.arg = arg; } Status.prototype.getStatus = function(){ return this.arg; } 接着实例化： var instance = new Status('a test string'); instance.getStatus(); instance.ooxx = 'ooxx'; 用 for&#8230;in 遍历属性： for(i in instance){ console.log(i); } 看下运行结果： arg ooxx getStatus 可见原型方法也被遍历出来的，但事实上往往并不想要。于是需要这么干： for(i in object){ if(object.hasOwenProperty(i)){ //... } } 这样就能把函数和原型属性方法过滤掉鸟~ 参考：《JavaScript 语言精粹》第 120 页，饺子哥威武！ 推荐阅读一道 [...]]]></description>
			<content:encoded><![CDATA[<p>For&#8230;In 声明用于遍历数组或者对象的属性（对数组或者对象的属性进行循环操作）。</p>
<p>先定义一个构造函数：</p>
<pre>var Status = function(arg){
    this.arg = arg;
}
Status.prototype.getStatus = function(){
    return this.arg;
}
</pre>
<p>接着实例化：</p>
<pre>var instance = new Status('a test string');
instance.getStatus();
instance.ooxx = 'ooxx';
</pre>
<p>用 for&#8230;in 遍历属性：</p>
<pre>for(i in instance){
    console.log(i);
}
</pre>
<p>看下运行结果：</p>
<pre>arg
ooxx
getStatus
</pre>
<p>可见原型方法也被遍历出来的，但事实上往往并不想要。于是需要这么干：</p>
<pre>for(i in object){
    if(object.hasOwenProperty(i)){
        //...
    }
}
</pre>
<p>这样就能把函数和原型属性方法过滤掉鸟~<br />
参考：《<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 语言精粹》第 120 页，<a href="http://wwf.name" target="_blank">饺子哥威武</a>！</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/javascript-for-in-loop-trap/">固定链接</a> | <a href="http://www.mangguo.org/javascript-for-in-loop-trap/#comments">6 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/for-in/" rel="tag">for...in</a>, <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/javascript-for-in-loop-trap/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>当构造函数遇到 YUI3 封装机制</title>
		<link>http://www.mangguo.org/when-constructor-function-meet-yui3-encapsulation-mechanism/</link>
		<comments>http://www.mangguo.org/when-constructor-function-meet-yui3-encapsulation-mechanism/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 10:16:07 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[YUI3]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5456</guid>
		<description><![CDATA[/* * 构造确认操作对话框 * @constructor ConfirmBox */ var ConfirmBox, confirmOff, confirmDel; ConfirmBox = function(msg, url){ this.msg = msg; this.url = url; }; ConfirmBox.prototype.fire = function(e){ var message = confirm(this.msg); if(message){ window.location.href = this.url; } }; /* * 确定下架此楼盘？ * @instance confirmOff */ confirmOff = new ConfirmBox('确定下架此楼盘？', config.offUrl); if(Y.all('.sale-off')){ Y.on('click', confirmOff.fire, '.sale-off', confirmOff); } 由于 YUI3 [...]]]></description>
			<content:encoded><![CDATA[<pre>	/*
	 * 构造确认操作对话框
	 * @constructor ConfirmBox
	 */

	var ConfirmBox, confirmOff, confirmDel;

	ConfirmBox = function(msg, url){

		this.msg = msg;
		this.url = url;

	};

	ConfirmBox.prototype.fire = function(e){

		var message = confirm(this.msg);

		if(message){

			window.location.href = this.url;

		}
	};

	/*
	 * 确定下架此楼盘？
	 * @instance confirmOff
	 */
	confirmOff = new ConfirmBox('确定下架此楼盘？', config.offUrl);

	if(Y.all('.sale-off')){
		Y.on('click', confirmOff.fire, '.sale-off', <strong><span style="color: #ff0000;">confirmOff</span></strong>);
	}</pre>
<p>由于 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/yui3">YUI3</a></span> 的封装机制，通过 Y.on 注册事件默认上下文环境都是 Y 对象。而在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 构造函数中，其原型方法调用 this 时指向的是实例化的对象本身，如果不将 context 重置为实例本身，就挂了。如果没重置，console.log this.msg 属性就是下面这个情况鸟：</p>
<p><img class="alignnone size-full wp-image-5457" title="javascript-constructor" src="http://www.mangguo.org/wp-content/uploads/2011/03/javascript-constructor.png" alt="" width="456" height="300" /></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/yui3-3-0-transition-event-change/" title="YUI3.3.0 中 transition 事件的变化">YUI3.3.0 中 transition 事件的变化</a> (0)</li><li><a href="http://www.mangguo.org/async-get-form-data-and-submit/" title="异步获取并提交表单数据">异步获取并提交表单数据</a> (12)</li><li><a href="http://www.mangguo.org/fuck-ie-submit-can-not-propagation/" title="Fuck IE！submit 事件不冒泡怎么办？">Fuck IE！submit 事件不冒泡怎么办？</a> (14)</li><li><a href="http://www.mangguo.org/use-iframe-simulate-async-form-submit/" title="利用 iframe 假装异步提交表单">利用 iframe 假装异步提交表单</a> (13)</li><li><a href="http://www.mangguo.org/yui3-io-cache-caution-in-ie/" title="防范 YUI3 IO 在 IE 下的缓存">防范 YUI3 IO 在 IE 下的缓存</a> (2)</li><li><a href="http://www.mangguo.org/yui3-check-form-element-empty-or-checked/" title="YUI3：判断表单元素是否为空或选中">YUI3：判断表单元素是否为空或选中</a> (4)</li><li><a href="http://www.mangguo.org/yui3-checkbox-select/" title="YUI3：复选框 (checkbox) 的全选和反选">YUI3：复选框 (checkbox) 的全选和反选</a> (8)</li><li><a href="http://www.mangguo.org/y-substitute-yui3-template-substitute/" title="Y.substitute，YUI3 模板替换方法">Y.substitute，YUI3 模板替换方法</a> (6)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/when-constructor-function-meet-yui3-encapsulation-mechanism/">固定链接</a> | <a href="http://www.mangguo.org/when-constructor-function-meet-yui3-encapsulation-mechanism/#comments">8 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/yui/" rel="tag">YUI</a>, <a href="http://www.mangguo.org/tag/yui3/" rel="tag">YUI3</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/when-constructor-function-meet-yui3-encapsulation-mechanism/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>快速转换 CSS 字体 Unicode 编码</title>
		<link>http://www.mangguo.org/quick-transform-css-font-unicode-format/</link>
		<comments>http://www.mangguo.org/quick-transform-css-font-unicode-format/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 15:04:22 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5290</guid>
		<description><![CDATA[看了这篇 CSS 中文字体 Unicode 编码方案 后，某位童鞋说一用到中文字体就要去找对照表，麻烦死，那这样吧： escape('宋体'); 这样生成的宋体编码为： '%u5b8b%u4f53' 你可以手工将 %u 替换为斜杠 &#8216;\&#8217;。或者也可以这么搞： escape('宋体').replace(/%u/g, '\\'); 那就直接返回需要的编码格式鸟~ 推荐阅读CSS 中文字体 Unicode 编码方案 (7)Minify，合并压缩 JavaScript 和 CSS 文件 (12)13+ 模拟 JavaScript 交互效果的纯 CSS 技术 (4)使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟 (2)Closure Compiler，压缩！还是压缩！ (5)YUICompressor，强大的前端代码压缩工具 (1)简单的页面加载 (Loading) 效果 (4)一道 JavaScript 填空题 (1) © 2010 芒果小站 &#124; 固定链接 &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>看了这篇 <a href="../css-chinese-font-unicode-encode-solution/">CSS 中文字体 Unicode 编码方案</a> 后，某位童鞋说一用到中文字体就要去找对照表，麻烦死，那这样吧：</p>
<pre>escape('宋体');</pre>
<p>这样生成的宋体编码为：</p>
<pre>'%u5b8b%u4f53'</pre>
<p>你可以手工将 %u 替换为斜杠 &#8216;\&#8217;。或者也可以这么搞：</p>
<pre>escape('宋体').replace(/%u/g, '\\');</pre>
<p>那就直接返回需要的编码格式鸟~</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/css-chinese-font-unicode-encode-solution/" title="CSS 中文字体 Unicode 编码方案">CSS 中文字体 Unicode 编码方案</a> (7)</li><li><a href="http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/" title="Minify，合并压缩 JavaScript 和 CSS 文件">Minify，合并压缩 JavaScript 和 CSS 文件</a> (12)</li><li><a href="http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/" title="13+ 模拟 JavaScript 交互效果的纯 CSS 技术">13+ 模拟 JavaScript 交互效果的纯 CSS 技术</a> (4)</li><li><a href="http://www.mangguo.org/pure-html-clocks-using-javascript-css-rotation/" title="使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟">使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟</a> (2)</li><li><a href="http://www.mangguo.org/closure-compiler-compression-still-compression/" title="Closure Compiler，压缩！还是压缩！">Closure Compiler，压缩！还是压缩！</a> (5)</li><li><a href="http://www.mangguo.org/yuicompressor-powerful-js-css-code-compressor/" title="YUICompressor，强大的前端代码压缩工具">YUICompressor，强大的前端代码压缩工具</a> (1)</li><li><a href="http://www.mangguo.org/simple-page-loading-effect/" title="简单的页面加载 (Loading) 效果">简单的页面加载 (Loading) 效果</a> (4)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/quick-transform-css-font-unicode-format/">固定链接</a> | <a href="http://www.mangguo.org/quick-transform-css-font-unicode-format/#comments">20 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/css/" rel="tag">CSS</a>, <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/unicode/" rel="tag">Unicode</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/quick-transform-css-font-unicode-format/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>9 条 JavaScript 开发最佳实践</title>
		<link>http://www.mangguo.org/9-best-practices-for-javascript-development/</link>
		<comments>http://www.mangguo.org/9-best-practices-for-javascript-development/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 15:49:33 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSLint]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5143</guid>
		<description><![CDATA[1、使用正确的 &#60;script&#62; 标签 如果你需要在 html 文档中使用一些 JavaScript 代码，你应当通常会使用如下的 &#60;script&#62; 标签： &#60;script type="text/javascript"&#62; //insert your code here &#60;/script&#62; 但是在源代码中，以下这种标签写法随处可见： &#60;script type="text/javascript" language="javascript"&#62; //insert your code here &#60;/script&#62; 在 HTML 中，language 属性已经过时，因为具有 type 属性后，language 它是冗余的。不要再这样写了…… 事实上，客户端默认为将 JavaScript 代码指定 type=”text/javascript” 属性，除非需要 type=”application/x-javascript” 这样的类型，否则完全没有必要写 type 属性。关于 JavaScript MIME 类型，这里有一篇参考文档：http://krijnhoetmer.nl/stuff/javascript/mime-types/ 2、将代码放置于外部文件 使用外部 .js 文档比在 html 文档里直接写 JavaScript 代码要简洁一些，同时也使得 JS 文件可以被缓存，保证网站资源的快速访问。 [...]]]></description>
			<content:encoded><![CDATA[<h2>1、使用正确的 &lt;script&gt; 标签</h2>
<p>如果你需要在 html 文档中使用一些 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码，你应当通常会使用如下的 &lt;script&gt; 标签：</p>
<pre>&lt;script type="text/javascript"&gt;
//insert your code here
&lt;/script&gt;</pre>
<p>但是在源代码中，以下这种标签写法随处可见：</p>
<pre>&lt;script type="text/javascript" language="javascript"&gt;
//insert your code here
&lt;/script&gt;</pre>
<p>在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 中，language 属性已经过时，因为具有 type 属性后，language 它是冗余的。不要再这样写了……</p>
<p>事实上，客户端默认为将 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码指定 type=”text/javascript” 属性，除非需要 type=”application/x-javascript” 这样的类型，否则完全没有必要写 type 属性。关于 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> MIME 类型，这里有一篇参考文档：<a href="http://krijnhoetmer.nl/stuff/javascript/mime-types/" target="_blank">http://krijnhoetmer.nl/stuff/javascript/mime-types/</a></p>
<h2>2、将代码放置于外部文件</h2>
<p>使用外部 .js 文档比在 html 文档里直接写 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码要简洁一些，同时也使得 JS 文件可以被缓存，保证网站资源的快速访问。</p>
<p>将你的 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码置于一个 .js 文档中，然后在 html 文档中使用 <code>&lt;script&gt;</code> 标签来引入它：</p>
<pre>&lt;script src="http://www.mangguo.org/myscript.js"&gt;&lt;/script&gt;</pre>
<h2>3、避免使用 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 注释包裹代码</h2>
<p>90 年代一些非常古老的浏览器无法执行 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码。为了防止这些浏览器出现不必要的结果。在 1994 年至 1997 年间，在 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 中使用注释包裹 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码是良好的兼容方案，以保证不支持 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 的浏览器能够忽略它。</p>
<p>这里是一个简单案例：</p>
<pre>&lt;script language="<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span>"&gt;
&lt;!--
//insert your code here
//--&gt;
&lt;/script&gt;</pre>
<p>然而在 2010 年，所有的浏览器（甚至是可爱的 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/ie">IE</a></span> 6）都能解释 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码，因此绝对没有使用注释包裹 JS 代码的必要了。更糟的是，如果代码被 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 注释包裹，并且使用了 &#8212; 符号，浏览器可能会误以为 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 文档已经结束。</p>
<h2>4、使用框架</h2>
<p>除非你的 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 代码很短或者很简单，你应该通过框架来避免过多代码上的重复劳动。在我看来，jQuery 是最好的，有一个很棒的社区，所以值得尝试。</p>
<p>芒果语：其实 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/yui">YUI</a></span> 也很棒，系统、强大、完善、稳妥。更有牛逼叉叉的 Loader 机制，更高效地提高 Web 应用的性能。</p>
<h2>5、使用 var 关键字声明变量</h2>
<p>你应当使用 var 语句来声明变量，否则变量会存在于全局作用域内，并且使用 var 使得代码可读易懂。</p>
<p>比如下面的案例：</p>
<pre>var name = "Jean";
var size = data.length;</pre>
<p>之前在 <a href="http://www.mangguo.org/javascript-object-reference-mechanism/" target="_blank">JavaScript 中的对象引用机制</a> 的评论中也有涉及变量作用域的问题。</p>
<h2>6、保持代码的分离</h2>
<p>几年前，当一个程序员想要为一个 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 元素添加事件时（比如说，你想要在用户输入时验证时间信息），他会使用特殊的属性把 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 代码放置于 html 中，比如 onblur、onchange，onclick 等等。比如：</p>
<pre>&lt;input type="text" name="date" onchange="validateDate()" /&gt;</pre>
<p>虽然照样可行，但却很不简洁。<span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/html">HTML</a></span> 应当只包含文档的结构层面，就如同使用内联 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/css">CSS</a></span> 是不好的做法一样，内联 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 同样不可取。</p>
<p>取而代之，下面的代码如何？使用 jQuery 也很简单：</p>
<pre>$(document).ready(function(){
	$('input[name=date]').bind('change', validateDate);
});</pre>
<h2>7、在文档底部包含脚本文件</h2>
<p>不久以前，在 &lt;head&gt; 和 &lt;/head&gt; 标签之间插入脚本文件一度成为最佳实践。但浏览器是顺序解析文档，并动态加载外部文件的。这就意味着在页面头部插入脚本会在安排在页面内容之前加载。</p>
<p>为了在内容就绪之后再加载脚本，<a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 文件应该在文档底部被包含。就像下面这样：</p>
<pre>    &lt;script src="myscript.js?"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<h2>8、使用 JSLint</h2>
<p><a href="http://www.jslint.com/" target="_blank">JSLint</a> 是一款用于 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 源代码检查的应用程序。如果它发现 JS 中存在某些问题，就会返回相关的问题描述信息和大概的解决方案。<br />
JSLint 能有效发现代码中的缺陷，或者说代码风格上值得改进之处。这个站点是 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 开发绝对值得收藏的。</p>
<h2>9、不要轻易使用 document.write</h2>
<p>陈旧的 <code>document.write</code> 方法已经被不赞成使用了好些年，然而这仍然是一贯使用的方法。</p>
<pre>document.write("hello world");</pre>
<p>应当使用 DOM 的 innerHTML 属性在页面中插入文本。</p>
<pre>document.getElementById('hello').innerHTML = 'hello world';</pre>
<p>注：这篇文章是用阿里输入法打的，感觉还不错……</p>
<p>英文原稿：<a href="http://www.catswhocode.com/blog/best-practices-for-modern-javascript-development" target="_blank">Best practices for modern Javascript development | Cats Who Code</a><br />
翻译整理：<a href="../9-best-practices-for-javascript-development" target="_blank">9 条 JavaScript 开发最佳实践 | 芒果</a></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/9-best-practices-for-javascript-development/">固定链接</a> | <a href="http://www.mangguo.org/9-best-practices-for-javascript-development/#comments">27 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/jslint/" rel="tag">JSLint</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/9-best-practices-for-javascript-development/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>JavaScript 中的对象引用机制</title>
		<link>http://www.mangguo.org/javascript-object-reference-mechanism/</link>
		<comments>http://www.mangguo.org/javascript-object-reference-mechanism/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 08:34:10 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=5106</guid>
		<description><![CDATA[容易搞混淆的东东，这里记一下笔记。 对象的引用机制：对象不会被复制，只能通过引用来传递。 简单的例子： var i = mangguo = {}; //不论是否为空对象 mangguo.address = 'Hangzhou'; 那么 mangguo.address 的值和 i.address 一致，原因是 i 和 mangguo 引用的是同一个对象。 但如果分别声明 i 和 mangguo 两个空对象： var i = {}, mangguo = {}; 此时 i 和 mangguo 是两个不同的空对象引用。 推荐阅读一道 JavaScript 填空题 (1)莫名其妙的 JavaScript 字符串换行 (7)当前域的 JavaScript 条件判断 (15)一段关于 JSONP Callback 的简要代码 (0)10+ 优化网站的 .htaccess [...]]]></description>
			<content:encoded><![CDATA[<p>容易搞混淆的东东，这里记一下笔记。</p>
<p>对象的引用机制：<strong>对象不会被复制，只能通过引用来传递。</strong><br />
简单的例子：</p>
<pre>var i = mangguo = {}; //不论是否为空对象
mangguo.address = 'Hangzhou';</pre>
<p>那么 mangguo.address 的值和 i.address 一致，原因是 i 和 mangguo 引用的是同一个对象。<br />
但如果分别声明 i 和 mangguo 两个空对象：</p>
<pre>var i = {},
mangguo = {};</pre>
<p>此时 i 和 mangguo 是两个不同的空对象引用。</p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li><li><a href="http://www.mangguo.org/conditions-to-determine-the-current-domain-of-javascript/" title="当前域的 JavaScript 条件判断">当前域的 JavaScript 条件判断</a> (15)</li><li><a href="http://www.mangguo.org/a-brief-paragraph-on-jsonp-callback-code/" title="一段关于 JSONP Callback 的简要代码">一段关于 JSONP Callback 的简要代码</a> (0)</li><li><a href="http://www.mangguo.org/10-for-site-optimization-htaccess-code-snippets/" title="10+ 优化网站的 .htaccess 代码片段">10+ 优化网站的 .htaccess 代码片段</a> (19)</li><li><a href="http://www.mangguo.org/google-styleguide-manual/" title="来自 Google 的编程风格指南">来自 Google 的编程风格指南</a> (10)</li><li><a href="http://www.mangguo.org/javascript-prototype-constructor-inheritance/" title="JavaScript 原型继承之构造函数继承">JavaScript 原型继承之构造函数继承</a> (12)</li><li><a href="http://www.mangguo.org/javascript-prototype-inheritance-basic-mechanisms/" title="JavaScript 原型继承之基础机制">JavaScript 原型继承之基础机制</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/javascript-object-reference-mechanism/">固定链接</a> | <a href="http://www.mangguo.org/javascript-object-reference-mechanism/#comments">15 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/javascript-object-reference-mechanism/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Minify，合并压缩 JavaScript 和 CSS 文件</title>
		<link>http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/</link>
		<comments>http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 10:22:30 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Minify]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=4773</guid>
		<description><![CDATA[对于网站应用而言，HTTP 请求是一件奢侈的事情，所以我们要尽量减少它。减少 HTTP 请求也正是网站性能优化的一个要素。通常通过手工合并会带来大量的维护问题。所以能交给机器做的就让机器来做吧。 之前有心的网友可能会发现，芒果的 CSS 并非一般的样式表引入方式，而是像下面这样： &#60;link href="/min/b=wp-content/themes/mangguo/css&#38;f=reset.css,mangguo.min.css" rel="stylesheet" /&#62; 这就是使用 Minify 方案后的结果。那究竟 Minify 是什么？ “Minify 可以按需对 JavaScript 以及 CSS 文件进行合并、压缩以及缓存，以加快页面的载入速度。而安装 Minify 则极其简单，只需在网站根目录下上传程序目录即可。” 我们不妨来简单分解一下芒果这个怪异的 CSS 文件，首先通过访问根目录下的 minify 目录 (/min/) ，以参数形式指定文件目录 (参数 b)，配置需要压缩合并的 CSS 单文件 (参数 f)，然后动态输出独立的伪 CSS 文件。以芒果为例： 整站共有 reset.css、mangguo.min.css 两个样式文件。放置于 WordPress 对应当前主题的 CSS 目录下，那么基准 URL 指定为： b=wp-content/themes/mangguo/css 文件列表指定为： f=reset.css,mangguo.min.css 参数之间通过 &#38; 符号连接。也可以不指定基准 URL，而缺省 [...]]]></description>
			<content:encoded><![CDATA[<p>对于网站应用而言，HTTP 请求是一件奢侈的事情，所以我们要尽量减少它。减少 HTTP 请求也正是网站性能优化的一个要素。通常通过手工合并会带来大量的维护问题。所以能交给机器做的就让机器来做吧。</p>
<p>之前有心的网友可能会发现，<a href="http://www.mangguo.org/">芒果</a>的 <a href="http://www.mangguo.org/tag/css/">CSS</a> 并非一般的样式表引入方式，而是像下面这样：</p>
<pre>&lt;link href="/min/b=wp-content/themes/mangguo/css&amp;f=reset.css,mangguo.min.css" rel="stylesheet" /&gt;</pre>
<p>这就是使用 Minify 方案后的结果。那究竟 Minify 是什么？</p>
<p>“Minify 可以按需对 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 以及 <a href="http://www.mangguo.org/tag/css/">CSS</a> 文件进行合并、压缩以及缓存，以加快页面的载入速度。而安装 Minify 则极其简单，只需在网站根目录下上传程序目录即可。”</p>
<p>我们不妨来简单分解一下芒果这个怪异的 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/css">CSS</a></span> 文件，首先通过访问根目录下的 minify 目录 (/min/) ，以参数形式指定文件目录 (参数 b)，配置需要压缩合并的 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/css">CSS</a></span> 单文件 (参数 f)，然后动态输出独立的伪 <a href="http://www.mangguo.org/tag/css/">CSS</a> 文件。以芒果为例：</p>
<p>整站共有 reset.css、mangguo.min.css 两个样式文件。放置于 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/wordpress">WordPress</a></span> 对应当前主题的 <a href="http://www.mangguo.org/tag/css/">CSS</a> 目录下，那么基准 URL 指定为：</p>
<pre>b=wp-content/themes/mangguo/css</pre>
<p>文件列表指定为：</p>
<pre>f=reset.css,mangguo.min.css</pre>
<p>参数之间通过 &amp; 符号连接。也可以不指定基准 URL，而缺省 b 参数直接配置文件组合：</p>
<pre>&lt;link href="/min/f=wp-content/themes/mangguo/css/reset.css,wp-content/themes/mangguo/css/mangguo.min.css" rel="stylesheet" /&gt;</pre>
<p>当然 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/javascript">JavaScript</a></span> 文件的压缩合并原理和 <span class='bm_keywordlink'><a href="http://www.mangguo.org/tag/css">CSS</a></span> 是一致的。</p>
<p>项目托管地址：<a href="http://code.google.com/p/minify" target="_blank">http://code.google.com/p/minify</a></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/quick-transform-css-font-unicode-format/" title="快速转换 CSS 字体 Unicode 编码">快速转换 CSS 字体 Unicode 编码</a> (20)</li><li><a href="http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/" title="13+ 模拟 JavaScript 交互效果的纯 CSS 技术">13+ 模拟 JavaScript 交互效果的纯 CSS 技术</a> (4)</li><li><a href="http://www.mangguo.org/pure-html-clocks-using-javascript-css-rotation/" title="使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟">使用 JavaScript 和 CSS Rotation 的纯 HTML 时钟</a> (2)</li><li><a href="http://www.mangguo.org/closure-compiler-compression-still-compression/" title="Closure Compiler，压缩！还是压缩！">Closure Compiler，压缩！还是压缩！</a> (5)</li><li><a href="http://www.mangguo.org/yuicompressor-powerful-js-css-code-compressor/" title="YUICompressor，强大的前端代码压缩工具">YUICompressor，强大的前端代码压缩工具</a> (1)</li><li><a href="http://www.mangguo.org/simple-page-loading-effect/" title="简单的页面加载 (Loading) 效果">简单的页面加载 (Loading) 效果</a> (4)</li><li><a href="http://www.mangguo.org/a-javascript-fill-in-the-blank/" title="一道 JavaScript 填空题">一道 JavaScript 填空题</a> (1)</li><li><a href="http://www.mangguo.org/inexplicable-javascript-string-line/" title="莫名其妙的 JavaScript 字符串换行">莫名其妙的 JavaScript 字符串换行</a> (7)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/">固定链接</a> | <a href="http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/#comments">12 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/css/" rel="tag">CSS</a>, <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/minify/" rel="tag">Minify</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>13+ 模拟 JavaScript 交互效果的纯 CSS 技术</title>
		<link>http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/</link>
		<comments>http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/#comments</comments>
		<pubDate>Sat, 22 May 2010 04:25:11 +0000</pubDate>
		<dc:creator>芒果</dc:creator>
				<category><![CDATA[前端]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Design Ledger]]></category>

		<guid isPermaLink="false">http://www.mangguo.org/?p=4089</guid>
		<description><![CDATA[在用户界面这一块，使用 JavaScript 总能创造出丰富强大的交互效果。但只需一点想象力和创造力，仅仅通过 CSS 也可以实现相同类型的效果。以下是 13+ 模拟 JavaScript 交互效果的纯 CSS 技术，使我们不再用单一的方式实现需要的交互。你会发现，这些技术有些是非常有用的，而有些则证明能用纯 CSS 更为简单地实现。 如何使用纯 CSS 创建宝丽来相册 使用 CSS3 创建 coda 效果的气泡 使用 CSS 创建折叠菜单 如何使用 CSS3 创建图像画廊 纯 CSS3 悬停选项卡 使用 CSS 创建类 JQuery 幻灯切换 如何用 CSS 创建 Lightbox 弹出对话框 纯 CSS 数据表 CSS 气泡效果 CSS 图片切换 纯 CSS 折线图 CSS3 表单提示 纯 CSS 时间线 [...]]]></description>
			<content:encoded><![CDATA[<p>在用户界面这一块，使用 <a href="http://www.mangguo.org/tag/javascript/">JavaScript</a> 总能创造出丰富强大的交互效果。但只需一点想象力和创造力，仅仅通过 <a href="http://www.mangguo.org/tag/css/">CSS</a> 也可以实现相同类型的效果。以下是 <a href="13-pure-css-techniques-for-creating-javascript-like-interactions">13+ 模拟 JavaScript 交互效果的纯 CSS 技术</a>，使我们不再用单一的方式实现需要的交互。你会发现，这些技术有些是非常有用的，而有些则证明能用纯 <a href="http://www.mangguo.org/tag/css/">CSS</a> 更为简单地实现。</p>
<p><strong><a href="http://line25.com/tutorials/how-to-create-a-pure-css-polaroid-photo-gallery" target="_blank">如何使用纯 CSS 创建宝丽来相册</a></strong></p>
<p><a href="http://line25.com/tutorials/how-to-create-a-pure-css-polaroid-photo-gallery" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_5.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.admixweb.com/2010/05/12/creating-a-bubble-coda-style-with-css3/" target="_blank">使用 CSS3 创建 coda 效果的气泡</a></strong></p>
<p><a href="http://www.admixweb.com/2010/05/12/creating-a-bubble-coda-style-with-css3/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_1.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.fofronline.com/2009-06/accordion-using-only-css/" target="_blank">使用 CSS 创建折叠菜单</a></strong></p>
<p><a href="http://www.fofronline.com/2009-06/accordion-using-only-css/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_8.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.admixweb.com/2010/03/08/how-to-create-a-fancy-image-gallery-with-css3/" target="_blank">如何使用 CSS3 创建图像画廊</a></strong></p>
<p><a href="http://www.admixweb.com/2010/03/08/how-to-create-a-fancy-image-gallery-with-css3/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_9.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.kamikazemusic.com/quick-tips/css3-hover-tabs-without-javascript/" target="_blank">纯 CSS3 悬停选项卡</a></strong></p>
<p><a href="http://www.kamikazemusic.com/quick-tips/css3-hover-tabs-without-javascript/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_10.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.nealgrosskopf.com/tech/thread.php?pid=45" target="_blank">使用 CSS 创建类 JQuery 幻灯切换</a></strong></p>
<p><a href="http://www.nealgrosskopf.com/tech/thread.php?pid=45" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_3.jpg" alt="css only" /></a></p>
<p><strong><a href="http://carsonified.com/blog/design/css/how-to-create-a-valid-non-javascript-lightbox/" target="_blank">如何用 CSS 创建 Lightbox 弹出对话框</a></strong></p>
<p><a href="http://carsonified.com/blog/design/css/how-to-create-a-valid-non-javascript-lightbox/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_2.jpg" alt="css only" /></a></p>
<p><strong><a href="http://cssglobe.com/post/1272/pure-css-data-chart" target="_blank">纯 CSS 数据表</a></strong></p>
<p><a href="http://cssglobe.com/post/1272/pure-css-data-chart" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_4.jpg" alt="css only" /></a></p>
<p><strong><a href="http://aext.net/2009/11/bubble-effect-with-css/" target="_blank">CSS 气泡效果</a></strong></p>
<p><a href="http://aext.net/2009/11/bubble-effect-with-css/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_7.jpg" alt="css only" /></a></p>
<p><strong><a href="http://css-tricks.com/video-screencasts/82-css-image-switcher/" target="_blank">CSS 图片切换</a></strong></p>
<p><a href="http://css-tricks.com/video-screencasts/82-css-image-switcher/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_11.jpg" alt="css only" /></a></p>
<p><strong><a href="http://cssglobe.com/post/4175/pure-css-line-graph" target="_blank">纯 CSS 折线图</a></strong></p>
<p><a href="http://cssglobe.com/post/4175/pure-css-line-graph" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_6.jpg" alt="css only" /></a></p>
<p><strong><a href="http://www.skyrocketlabs.com/articles/css3-web-form-hints.php" target="_blank">CSS3 表单提示</a></strong></p>
<p><a href="http://www.skyrocketlabs.com/articles/css3-web-form-hints.php" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_12.jpg" alt="css only" /></a></p>
<p><strong><a href="http://mattbango.com/notebook/web-development/pure-css-timeline/" target="_blank">纯 CSS 时间线</a></strong></p>
<p><a href="http://mattbango.com/notebook/web-development/pure-css-timeline/" target="_blank"><img src="http://www.mangguo.org/wp-content/uploads/2010/05/css_only_13.jpg" alt="css only" /></a></p>
<p>英文原稿：<a href="http://webdesignledger.com/tutorials/13-pure-css-techniques-for-creating-javascript-like-interactions" target="_blank">13 Pure CSS Techniques for Creating JavaScript-like Interactions | Web Design Ledger</a><br />
翻译整理：<a href="../google-font-api-use-personalized-font-on-web-page" target="_blank">13+ 模拟 JavaScript 交互效果的纯 CSS 技术 | 芒果</a></p>
<h3  class="related_post_title">推荐阅读</h3><ul class="related_post"><li><a href="http://www.mangguo.org/12-excellent-css3-button-and-menu-techniques/" title="12 个优秀的 CSS3 按钮和菜单技巧">12 个优秀的 CSS3 按钮和菜单技巧</a> (0)</li><li><a href="http://www.mangguo.org/10-useful-tools-to-simplify-css3-development/" title="12 款简化 CSS3 开发的实用工具">12 款简化 CSS3 开发的实用工具</a> (12)</li><li><a href="http://www.mangguo.org/how-to-use-css3-pseudo-classes/" title="如何使用 CSS3 伪类">如何使用 CSS3 伪类</a> (7)</li><li><a href="http://www.mangguo.org/quick-transform-css-font-unicode-format/" title="快速转换 CSS 字体 Unicode 编码">快速转换 CSS 字体 Unicode 编码</a> (20)</li><li><a href="http://www.mangguo.org/css3-media-queries/" title="CSS3 Media Queries，媒介设备查询">CSS3 Media Queries，媒介设备查询</a> (9)</li><li><a href="http://www.mangguo.org/minify-merge-compress-javascript-and-css-file/" title="Minify，合并压缩 JavaScript 和 CSS 文件">Minify，合并压缩 JavaScript 和 CSS 文件</a> (12)</li><li><a href="http://www.mangguo.org/pure-css-text-gradients-effect/" title="纯 CSS 实现文本渐变效果">纯 CSS 实现文本渐变效果</a> (9)</li><li><a href="http://www.mangguo.org/css-21-and-css-3-help-cheat-sheets/" title="CSS2.1 和 CSS3 帮助文档及参考手册">CSS2.1 和 CSS3 帮助文档及参考手册</a> (0)</li></ul><hr />
© 2010 芒果小站 | <a href="http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/">固定链接</a> | <a href="http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/#comments">4 条评论</a> | 标签 <a href="http://www.mangguo.org/tag/css/" rel="tag">CSS</a>, <a href="http://www.mangguo.org/tag/css3/" rel="tag">CSS3</a>, <a href="http://www.mangguo.org/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://www.mangguo.org/tag/web-design-ledger/" rel="tag">Web Design Ledger</a>]]></content:encoded>
			<wfw:commentRss>http://www.mangguo.org/13-pure-css-techniques-for-creating-javascript-like-interactions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

