<?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://bluehua.org/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://bluehua.org</link>
	<description>分享所学,backup一切~</description>
	<lastBuildDate>Wed, 23 Nov 2011 08:43:10 +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>Hello lua</title>
		<link>http://bluehua.org/2011/06/23/1650.html</link>
		<comments>http://bluehua.org/2011/06/23/1650.html#comments</comments>
		<pubDate>Thu, 23 Jun 2011 13:31:33 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[IOS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1650</guid>
		<description><![CDATA[lua将作为下一门新语言学习。如果按照一年学习一门新语言的标准来说，我算超勤快的了。lua被发明的目的便是嵌入C或C++程序，给程序带来编译语言不及的灵活性。 google了一下lua，发现大部分都是做游戏开发的C++程序员的文章，看来不只是魔兽世界在用。 lua做嵌入的优势： 1 . 小，整个解释器不到200K 实际测试: 编译一个空的IOS项目 205K 嵌入Lua后的IOS项目 414K 2 . 运行速度快 实际测试: 做了三个测试程序，分别内嵌lua(静态链接)，javascript(动态链接JavascriptCore,链接库6.4M),python(动态链接python2.6,链接库2.0M) 三个程序都做相同的事情，初始化一个脚本运行环境，打印一个字符串，销毁 比如lua,其他JS和python类似，只不过调用的api不一样: static int lua_printf&#40;lua_State *L&#41; &#123; const char *cmsg = luaL_checkstring&#40;L, 1&#41;; printf&#40;&#34;%s\n&#34;, cmsg&#41;; return 0; &#125; &#160; static void eval_lua&#40;NSString *code&#41; &#123; lua_State *L; L = lua_open&#40;&#41;; luaopen_base&#40;L&#41;; lua_register&#40;L, &#34;printf&#34;, lua_printf&#41;; luaL_loadstring&#40;L, &#91;code cStringUsingEncoding:NSUTF8StringEncoding&#93;&#41;; lua_pcall&#40;L, 0, LUA_MULTRET, [...]]]></description>
			<content:encoded><![CDATA[<p>lua将作为下一门新语言学习。如果按照一年学习一门新语言的标准来说，我算超勤快的了。lua被发明的目的便是嵌入C或C++程序，给程序带来编译语言不及的灵活性。<br />
google了一下lua，发现大部分都是做游戏开发的C++程序员的文章，看来不只是魔兽世界在用。</p>
<p>lua做嵌入的优势：<br />
1 . 小，整个解释器不到200K<br />
实际测试:<br />
编译一个空的IOS项目 205K<br />
嵌入Lua后的IOS项目 414K<br />
2 . 运行速度快<br />
实际测试:<br />
做了三个测试程序，分别内嵌lua(静态链接)，javascript(动态链接JavascriptCore,链接库6.4M),python(动态链接python2.6,链接库2.0M)<br />
三个程序都做相同的事情，初始化一个脚本运行环境，打印一个字符串，销毁<br />
比如lua,其他JS和python类似，只不过调用的api不一样:</p>

<div class="wp_syntax"><div class="code overflow"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">static</span> <span style="color: #a61390;">int</span> lua_printf<span style="color: #002200;">&#40;</span>lua_State <span style="color: #002200;">*</span>L<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>cmsg <span style="color: #002200;">=</span> luaL_checkstring<span style="color: #002200;">&#40;</span>L, <span style="color: #2400d9;">1</span><span style="color: #002200;">&#41;</span>;
    <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;%s<span style="color: #2400d9;">\n</span>&quot;</span>, cmsg<span style="color: #002200;">&#41;</span>;
    <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">static</span> <span style="color: #a61390;">void</span> eval_lua<span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>code<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    lua_State <span style="color: #002200;">*</span>L;
    L <span style="color: #002200;">=</span> lua_open<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
    luaopen_base<span style="color: #002200;">&#40;</span>L<span style="color: #002200;">&#41;</span>;
    lua_register<span style="color: #002200;">&#40;</span>L, <span style="color: #bf1d1a;">&quot;printf&quot;</span>, lua_printf<span style="color: #002200;">&#41;</span>;
    luaL_loadstring<span style="color: #002200;">&#40;</span>L, <span style="color: #002200;">&#91;</span>code cStringUsingEncoding<span style="color: #002200;">:</span>NSUTF8StringEncoding<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
    lua_pcall<span style="color: #002200;">&#40;</span>L, <span style="color: #2400d9;">0</span>, LUA_MULTRET, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;
    lua_close<span style="color: #002200;">&#40;</span>L<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">int</span> main <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span> argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
    <span style="color: #400080;">NSAutoreleasePool</span> <span style="color: #002200;">*</span>pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSAutoreleasePool</span> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
&nbsp;
    NSTimeInterval start <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> timeIntervalSinceReferenceDate<span style="color: #002200;">&#93;</span>;
    eval_lua<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;printf(<span style="color: #2400d9;">\&quot;</span>你好 lua<span style="color: #2400d9;">\&quot;</span>)&quot;</span><span style="color: #002200;">&#41;</span>;
    NSTimeInterval duration <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSDate</span> timeIntervalSinceReferenceDate<span style="color: #002200;">&#93;</span> <span style="color: #002200;">-</span> start;
    <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;total time:%.5f<span style="color: #2400d9;">\n</span>&quot;</span>, duration<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span>pool release<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>PK结果</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-lh</span> <span style="color: #000000; font-weight: bold;">*</span>_test
<span style="color: #660033;">-rwxr-xr-x</span>  <span style="color: #000000;">1</span> hualu  staff    10K  <span style="color: #000000;">6</span> <span style="color: #000000;">23</span> <span style="color: #000000;">20</span>:<span style="color: #000000;">32</span> js_test
<span style="color: #660033;">-rwxr-xr-x</span>  <span style="color: #000000;">1</span> hualu  staff   136K  <span style="color: #000000;">6</span> <span style="color: #000000;">23</span> <span style="color: #000000;">20</span>:<span style="color: #000000;">37</span> lua_test
<span style="color: #660033;">-rwxr-xr-x</span>  <span style="color: #000000;">1</span> hualu  staff   9.4K  <span style="color: #000000;">6</span> <span style="color: #000000;">23</span> <span style="color: #000000;">20</span>:<span style="color: #000000;">32</span> py_test
$ .<span style="color: #000000; font-weight: bold;">/</span>lua_test
你好 lua
total <span style="color: #000000; font-weight: bold;">time</span>:<span style="color: #000000;">0.00018</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>js_test
你好 Javascript
total <span style="color: #000000; font-weight: bold;">time</span>:<span style="color: #000000;">0.00557</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>py_test
你好 Python
total <span style="color: #000000; font-weight: bold;">time</span>:<span style="color: #000000;">0.01311</span></pre></div></div>

<p>3.  lua支持多线程，每个线程可以配置独立的解释器（没有亲测，道听途说)<br />
4. 语法简单，其实这个可以算优点，比JS要简单易懂的多。。。</p>
<p>lua这么小巧的身躯太适合嵌入手机软件了。可以动态的从server上加载一些lua脚本来运行，免去劳烦用户更新软件的烦恼～.就目前所知，愤怒的小鸟是一个混合编程的好例子，关卡的设置均由lua控制。</p>
<p>其实已经有geek为前面三门语言做了Objc的Bridge，项目分别是:<br />
对于lua有<a href="https://github.com/beetlebugorg/wax">wax</a><br />
对于js有<a href="http://code.google.com/p/jscocoa/">jscocoa</a><br />
对于python有<a href="http://pyobjc.sourceforge.net/documentation/index.html">PyObjc</a></p>
<p>而且他们的目的已经不是简单的嵌入Objectivc了，而是代替objc作为MAC或IOS应用的开发语言。。。当然我并不是很赞同这种偷懒的方法，脚本要适度使用。</p>
<p>最后，看的一些资料:<br />
<a href="http://www.codingnow.com/2000/download/lua_manual.html">Lua 5.1 参考手册</a><br />
<a href="http://www.grzmobile.com/blog/2009/11/13/integrating-lua-into-an-iphone-app.html">xcode中添加静态链接库</a><br />
<a href="http://bbs.luaer.cn/read-Lua-tid-83-fpage-2.html">lua和python谁更适用于嵌入MMORPG？</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/06/23/1650.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于js的字符串编码</title>
		<link>http://bluehua.org/2011/04/21/1607.html</link>
		<comments>http://bluehua.org/2011/04/21/1607.html#comments</comments>
		<pubDate>Thu, 21 Apr 2011 15:38:19 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[我火星]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[unichar]]></category>
		<category><![CDATA[utf-16]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1607</guid>
		<description><![CDATA[The String type is the set of all finite ordered sequences of zero or more 16-bit unsigned integer values (“elements”). The String type is generally used to represent textual data in a running ECMAScript program, in which case each element in the String is treated as a code unit value (see Clause 6). Each element [...]]]></description>
			<content:encoded><![CDATA[<p>The String type is the set of all finite ordered sequences of zero or more 16-bit unsigned integer values (“elements”). The String type is generally used to represent textual data in a running ECMAScript program, in which case each element in the String is treated as a code unit value (see Clause 6). Each element is regarded as occupying a position within the sequence. These positions are indexed with nonnegative integers. The first element (if any) is at position 0, the next element (if any) at position 1, and so on. The length of a String is the number of elements (i.e., 16-bit values) within it. The empty String has length zero and therefore contains no elements.<br />
When a String contains actual textual data, each element is considered to be a single UTF-16 code unit. Whether or not this is the actual storage format of a String, the characters within a String are numbered by their initial code unit element position as though they were represented using UTF-16. All operations on Strings (except as otherwise stated) treat them as sequences of undifferentiated 16-bit unsigned integers; they do not ensure the resulting String is in normalised form, nor do they ensure language-sensitive results.</p>
<p>按照ECMA标准，无论引擎底层如何实现，js的字符串看起来都应该是UTF-16编码的字符串，并且每个字符串单元代表一个UTF-16的双字节<br />
例如:<br />
&gt;”中”.length<br />
1<br />
<a href="http://bluehua.org/wp-content/uploads/2011/04/2011-21-04_230411.png"><img class="alignnone size-full wp-image-1612" title="2011-21-04_23:04:11" src="http://bluehua.org/wp-content/uploads/2011/04/2011-21-04_230411.png" alt="" width="111" height="32" /></a>(不知道这是啥特殊字符，发到wordpress有问题，直接贴图，那我是怎么输进去的呢，后面说转义符）<br />
“中”编码成UTF-16为一个双字节0x4E2D,所以长度为１<br />
长的像口的字符编码成UTF-16占４字节 0xD950 0xDF21,占用两个双字节，长度为２<br />
(下面用”口”代替这个特殊字符)<br />
&gt;”口”[0]<br />
“”<br />
&gt;”口”.charCodeAt(0).toString(16)<br />
“d950&#8243;<br />
所以字符串的长度显然是占用双字节的个数，而非我以前想当然认为的实际字符的个数。。。</p>
<p>\udddd形式的转义同样用来表示一个双字节，而非字符本身，”口”用转义符来表示的话:</p>
<p><a href="http://bluehua.org/wp-content/uploads/2011/04/2011-21-04_230440.png"><img class="alignnone size-full wp-image-1613" title="2011-21-04_23:04:40" src="http://bluehua.org/wp-content/uploads/2011/04/2011-21-04_230440.png" alt="" width="118" height="32" /></a></p>
<p>最后我要的结论是：</p>
<p>对于像objective　c里unichar一样的UTF-16编码格式的字符串可以通过@“\\u04x”直接得到json转义串～</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/04/21/1607.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PPJ回忆录</title>
		<link>http://bluehua.org/2011/01/16/1529.html</link>
		<comments>http://bluehua.org/2011/01/16/1529.html#comments</comments>
		<pubDate>Sun, 16 Jan 2011 09:27:11 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[PPJ]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://bluehua.org/2011/01/16/1529.html</guid>
		<description><![CDATA[个人以为:学一门脚本很容易，但是学几门就是一个痛苦的事，因为我经常把他们搞混。。 于是我下决心写一个能够帮我理清楚的文档，我命之为《PPJ回忆录》,从周5写到今天，精疲力尽，剩下OO和正则部分没写，我决定先歇会~ 毫不客气的说，对于同时学里面任意两门语言的同学，这个文档都会对你有帮助。 &#8212;&#8212;&#8212;&#8211; post by gmail~]]></description>
			<content:encoded><![CDATA[<p>个人以为:学一门脚本很容易，但是学几门就是一个痛苦的事，因为我经常把他们搞混。。</p>
<p>于是我下决心写一个能够帮我理清楚的文档，我命之为<a href="http://bluehua.org/demo/PPJ.html">《PPJ回忆录》</a>,从周5写到今天，精疲力尽，剩下OO和正则部分没写，我决定先歇会~</p>
<p>毫不客气的说，对于同时学里面任意两门语言的同学，这个文档都会对你有帮助。</p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
post by gmail~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2011/01/16/1529.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>一段用于辅助gettxt翻译的vim配置</title>
		<link>http://bluehua.org/2010/10/20/1451.html</link>
		<comments>http://bluehua.org/2010/10/20/1451.html#comments</comments>
		<pubDate>Wed, 20 Oct 2010 03:38:48 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[soft]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://bluehua.org/2010/10/20/1451.html</guid>
		<description><![CDATA[看图吧，用得到的话会觉的简直太爽了，^_^ 使用方法： 打开需要标记的文件，输入命令 :GettextMarkStart,开启辅助 选择需要翻译的文本 按_出来提示菜单，选择完成标记 配置：http://code-of-emptyhua.googlecode.com/svn/trunk/vim/addgettextmark.vim &#8212;&#8212;&#8212;&#8211; post by gmail~]]></description>
			<content:encoded><![CDATA[<p>看图吧，用得到的话会觉的简直太爽了，^_^<br />
使用方法：<br />
打开需要标记的文件，输入命令 :GettextMarkStart,开启辅助<br />
选择需要翻译的文本<br />
<a href="http://bluehua.org/wp-content/uploads/2010/10/screenshot_092.png"><img src="http://bluehua.org/wp-content/uploads/2010/10/screenshot_092.png" alt="screenshot_092.png" title="screenshot_092.png"/></a><br />
按_出来提示菜单，选择完成标记<br />
<a href="http://bluehua.org/wp-content/uploads/2010/10/screenshot_093.png"><img src="http://bluehua.org/wp-content/uploads/2010/10/screenshot_093.png" alt="screenshot_093.png" title="screenshot_093.png"/></a></p>
<p>配置：<a href="http://code-of-emptyhua.googlecode.com/svn/trunk/vim/addgettextmark.vim">http://code-of-emptyhua.googlecode.com/svn/trunk/vim/addgettextmark.vim</a></p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
post by gmail~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/10/20/1451.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>相对完美的设计思路~</title>
		<link>http://bluehua.org/2010/07/22/1394.html</link>
		<comments>http://bluehua.org/2010/07/22/1394.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 16:27:31 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[all in one]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[web.py]]></category>

		<guid isPermaLink="false">http://bluehua.org/2010/07/22/1394.html</guid>
		<description><![CDATA[有没有可能写一套代码适应以下三种情况: 1. 客户端没有开启javascript，或者使用ucweb一类的弱智浏览器访问时，功能没有影响 2. 客户端开启了javascript，每个页面都有单独加载的js,但是禁用ajax,只帮助用户交互 3. 客户端开启了javascript，为了提高载入速度，尽量使所有操作用ajax完成 略有所得: http://www.blogo2.com 源代码: http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2 没有禁用js的时候，页面切换，表单提交（注册和登录没有用）尽量的使用ajax，而且部分操作会使用弹层(登录后的管理),禁用js之后，则所有操作换成普通表单提交在页面之间跳来跳去。。 还有一个功能没有开启，就是可以选择不用ajax，但是独立开的页面js依然有效。 有兴趣的同学可以check源代码，这种模式的实现: 1. 开发的时候禁用ajax，单个页面开发，而且要求禁用js时业务可以走通，页面内的js和css统一由模板引入。 2. 对需要开启ajax的链接增加hook，例如data-ajax=”dialog:{}”,则表明在开启ajax模式后，点击这个链接需要弹窗 3. ajax模式下只需要对单个页面更换特有的模板，动态加载需要的js和css即可。 这种设计的特点: 1. 尽量一个人包前后端。。 2. json不潮了，ajax返回html代码，优点是js不用套页面了，缺点是流量大 over，虽然没有完美的代码，但是我尽量~ &#8212;&#8212;&#8212;&#8211; post by gmail~]]></description>
			<content:encoded><![CDATA[<p>有没有可能写一套代码适应以下三种情况:<br />
1. 客户端没有开启javascript，或者使用ucweb一类的弱智浏览器访问时，功能没有影响<br />
2. 客户端开启了javascript，每个页面都有单独加载的js,但是禁用ajax,只帮助用户交互<br />
3. 客户端开启了javascript，为了提高载入速度，尽量使所有操作用ajax完成</p>
<p>略有所得: <a href="http://www.blogo2.com">http://www.blogo2.com</a><br />
源代码: <a href="http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2">http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2</a></p>
<p>没有禁用js的时候，页面切换，表单提交（注册和登录没有用）尽量的使用ajax，而且部分操作会使用弹层(登录后的管理),禁用js之后，则所有操作换成普通表单提交在页面之间跳来跳去。。</p>
<p>还有一个功能没有开启，就是可以选择不用ajax，但是独立开的页面js依然有效。</p>
<p>有兴趣的同学可以check源代码，这种模式的实现:<br />
1. 开发的时候禁用ajax，单个页面开发，而且要求禁用js时业务可以走通，页面内的js和css统一由模板引入。<br />
2. 对需要开启ajax的链接增加hook，例如data-ajax=”dialog:{}”,则表明在开启ajax模式后，点击这个链接需要弹窗<br />
3. ajax模式下只需要对单个页面更换特有的模板，动态加载需要的js和css即可。</p>
<p>这种设计的特点:<br />
1. 尽量一个人包前后端。。<br />
2. json不潮了，ajax返回html代码，优点是js不用套页面了，缺点是流量大</p>
<p>over，虽然没有完美的代码，但是我尽量~</p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
post by gmail~</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/07/22/1394.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>js中简单实现数据和ui绑定</title>
		<link>http://bluehua.org/2010/05/18/1286.html</link>
		<comments>http://bluehua.org/2010/05/18/1286.html#comments</comments>
		<pubDate>Tue, 18 May 2010 09:27:44 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1286</guid>
		<description><![CDATA[很简单的例子 //计数加一 count ++ //更新ui jQuery&#40;'#count'&#41;.text&#40;count&#41;; 相信几乎所有前端工程师都会写过上面这样的代码，更新数据，然后更新ui，行云流水般的。 然而也是相当一部分内测bug的起源，数据删除了，ui里的计数没有变，或者ui变了，数据里确没有删除。而在逻辑复杂的应用里，更是很难保证不出这种低级错误。 其实我们可以通过自定义事件，这样重写 this.data_bind&#40;'count', 'change', function&#40;count&#41; &#123; //更新计数 jQuery&#40;'#count'&#41;.text&#40;count&#41;; &#125;&#41;; .... &#160; this.data_bind&#40;'count', 'change', function&#40;count&#41; &#123; //刷新分页 refresh_pager&#40;count&#41;; &#125;&#41;; &#160; this.set_data&#40;'count', this.get_data&#40;'count'&#41; + 1&#41;; 上次D2上听金大为讲模板技术，当时感觉耳目一新，最近边写边考虑这些新思想，其实使用现有的自定义事件要简单的多，而且灵活性，适用性更好。 用过flex的同学看完这篇文章肯定会说：靠，你们写js的还真是原始社会。。]]></description>
			<content:encoded><![CDATA[<p>很简单的例子</p>

<div class="wp_syntax"><div class="code overflow"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">//</span>计数加一
count ++
<span style="color: #000000; font-weight: bold;">//</span>更新ui
jQuery<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'#count'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.text<span style="color: #7a0874; font-weight: bold;">&#40;</span>count<span style="color: #7a0874; font-weight: bold;">&#41;</span>;</pre></div></div>

<p>相信几乎所有前端工程师都会写过上面这样的代码，更新数据，然后更新ui，行云流水般的。 然而也是相当一部分内测bug的起源，数据删除了，ui里的计数没有变，或者ui变了，数据里确没有删除。而在逻辑复杂的应用里，更是很难保证不出这种低级错误。</p>
<p>其实我们可以通过自定义事件，这样重写</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data_bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//更新计数</span>
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#count'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
....
&nbsp;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data_bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'change'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//刷新分页</span>
    refresh_pager<span style="color: #009900;">&#40;</span>count<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">set_data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">get_data</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'count'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>上次D2上听金大为讲模板技术，当时感觉耳目一新，最近边写边考虑这些新思想，其实使用现有的自定义事件要简单的多，而且灵活性，适用性更好。</p>
<p>用过flex的同学看完这篇文章肯定会说：靠，你们写js的还真是原始社会。。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/05/18/1286.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>js业务框架中对ajax的再次包装</title>
		<link>http://bluehua.org/2010/05/10/1216.html</link>
		<comments>http://bluehua.org/2010/05/10/1216.html#comments</comments>
		<pubDate>Mon, 10 May 2010 08:30:20 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1216</guid>
		<description><![CDATA[一个简单的load动作，如果简单用任何一个js框架实现 startloding&#40;&#41;; new ajax&#40;&#123; url : 'test.php', compete : function&#40;&#41; &#123; stoploading&#40;&#41; &#125;, success : function&#40;data&#41; &#123; try &#123; var obj = json_decode&#40;data&#41;; &#125; catch&#40;e&#41; &#123; //服务异常，未返回json造成异常 error&#40;'服务器异常'&#41;; return; &#125; &#160; //正常的业务逻辑错误 if &#40; json&#91;'code'&#93; !== 0 &#41; &#123; error&#40;json&#91;'desc'&#93;&#41;; return; &#125; &#160; ... &#125;, error : function&#40;&#41; &#123; //网络请求失败造成异常 error&#40;'网络异常'&#41;; &#125; &#125;&#41;; 而一个业务框架对ajax再次包装，成为一个action new [...]]]></description>
			<content:encoded><![CDATA[<p>一个简单的load动作，如果简单用任何一个js框架实现</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;">startloding<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">new</span> ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span><span style="color: #339933;">,</span>
    compete <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
         stoploading<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    success <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">try</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> json_decode<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">//服务异常，未返回json造成异常</span>
            error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'服务器异常'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #006600; font-style: italic;">//正常的业务逻辑错误</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> json<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'code'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!==</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            error<span style="color: #009900;">&#40;</span>json<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'desc'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        ...
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    error <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">//网络请求失败造成异常</span>
        error<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'网络异常'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>而一个业务框架对ajax再次包装，成为一个action</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> action<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    action <span style="color: #339933;">:</span> <span style="color: #3366CC;">'load'</span><span style="color: #339933;">,</span>
    action_name <span style="color: #339933;">:</span> <span style="color: #3366CC;">'加载'</span><span style="color: #339933;">,</span>
    url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'test.php'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_start'</span><span style="color: #339933;">,</span> startloading<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_complete'</span><span style="color: #339933;">,</span> stoploading<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//这里的成功不是ajax成功，而是判定json['code']之后action真正的成功，这就要求所有action需要有统一的成功判定标准，和json包装格式</span>
api.<span style="color: #660066;">add_action</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  .... <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//这里没有添加异常处理，因为没有特殊需要，所以action会执行默认的错误处理，可能是一个弹窗</span></pre></div></div>

<p>不仅仅是节省了代码，后者有更好的可读性，load动作本身也具有了更好的重用性</p>
<p>具体的框架代码已经在用，还不是很完美，待贴～</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/05/10/1216.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress api的js实现版本</title>
		<link>http://bluehua.org/2010/04/10/1084.html</link>
		<comments>http://bluehua.org/2010/04/10/1084.html#comments</comments>
		<pubDate>Fri, 09 Apr 2010 16:43:32 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1084</guid>
		<description><![CDATA[上次提到的一个想法的实现版本,正在应用到偶开发的项目当中~ 比wordpress的action和filter增加两个特性 能够添加一个只运行一次的action或者filter 可以通过返回{end:true}这种特殊对象来结束一个action或者filter 这两个特性在web开发里灰常有用 &#60;html&#62; &#60;script&#62; //2010.4.10 第一版 &#40;function&#40;ns&#41; &#123; var filters = &#123;&#125;; var max_priority = 10; var default_priority = 10; &#160; var array_include = function&#40;a, v&#41; &#123; for &#40; var i = 0, j = a.length; i &#60; j; i ++ &#41; &#123; if &#40; a&#91;i&#93; == v &#41; return true; &#125; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bluehua.org/2009/12/22/751.html">上次提到的一个想法的实现版本</a>,正在应用到偶开发的项目当中~<br />
比wordpress的action和filter增加两个特性</p>
<ul>
<li>能够添加一个只运行一次的action或者filter</li>
<li>可以通过返回{end:true}这种特殊对象来结束一个action或者filter</li>
</ul>
<p>这两个特性在web开发里灰常有用</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #006600; font-style: italic;">//2010.4.10 第一版</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>ns<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> filters <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> max_priority <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> default_priority <span style="color: #339933;">=</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> array_include <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> v <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">var</span> to_array <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> rt <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> a.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
           rt.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> _set<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> key<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        func<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'__filter_'</span> <span style="color: #339933;">+</span> tag <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> priority <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> key<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> _get<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> key<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> func<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'__filter_'</span> <span style="color: #339933;">+</span> tag <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> priority <span style="color: #339933;">+</span> <span style="color: #3366CC;">'_'</span> <span style="color: #339933;">+</span> key<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ns.<span style="color: #660066;">add_filter</span> <span style="color: #339933;">=</span> ns.<span style="color: #660066;">add_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> run_once<span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        run_once <span style="color: #339933;">=</span> run_once <span style="color: #339933;">===</span> undefined <span style="color: #339933;">?</span> <span style="color: #003366; font-weight: bold;">false</span> <span style="color: #339933;">:</span> run_once<span style="color: #339933;">;</span>
        priority <span style="color: #339933;">=</span> priority <span style="color: #339933;">||</span> default_priority<span style="color: #339933;">;</span> 
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>array_include<span style="color: #009900;">&#40;</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> func<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>priority<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>func<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        _set<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> <span style="color: #3366CC;">'run_once'</span><span style="color: #339933;">,</span> run_once<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">add_once_filter</span> <span style="color: #339933;">=</span> ns.<span style="color: #660066;">add_once_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        ns.<span style="color: #660066;">add_filter</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> func<span style="color: #339933;">,</span> priority<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">function</span> filter_or_action<span style="color: #009900;">&#40;</span>ac<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> value<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> ac <span style="color: #339933;">==</span> <span style="color: #3366CC;">'action'</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> args <span style="color: #339933;">=</span> to_array<span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            args.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            args.<span style="color: #660066;">shift</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003366; font-weight: bold;">var</span> _cfs <span style="color: #339933;">=</span> filters<span style="color: #009900;">&#91;</span>tag<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> func<span style="color: #339933;">;</span> 
        <span style="color: #003366; font-weight: bold;">var</span> rt <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> i <span style="color: #339933;">&lt;=</span> max_priority <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>_cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">===</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span> 
            <span style="color: #009900;">&#123;</span>
                i <span style="color: #339933;">++;</span>
                <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> length <span style="color: #339933;">=</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> length<span style="color: #339933;">;</span> j <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                func <span style="color: #339933;">=</span> _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> ac <span style="color: #339933;">==</span> <span style="color: #3366CC;">'action'</span> <span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                    rt <span style="color: #339933;">=</span> func.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> args<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">else</span>
                <span style="color: #009900;">&#123;</span>
                    rt <span style="color: #339933;">=</span> func.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> rt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> _get<span style="color: #009900;">&#40;</span>func<span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> i<span style="color: #339933;">,</span> <span style="color: #3366CC;">'run_once'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> 
                <span style="color: #009900;">&#123;</span>
                    _cfs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">splice</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    j <span style="color: #339933;">--;</span>
                    length <span style="color: #339933;">--;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> rt <span style="color: #339933;">&amp;&amp;</span> rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'end'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            i <span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066; font-weight: bold;">return</span> rt<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">apply_filters</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> filter_or_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fitler'</span><span style="color: #339933;">,</span> tag<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    ns.<span style="color: #660066;">do_action</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> args <span style="color: #339933;">=</span> to_array<span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        filter_or_action.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'action'</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span>args<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> log<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;p&gt;'</span> <span style="color: #339933;">+</span> str <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//普通的filter</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/orz/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'超人'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//再添加一个filter</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'超人'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'动感'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//添加一个优先级较高的filter,并通过返回包含end字段的对象结束过滤器</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>end<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> value<span style="color: #339933;">:</span>text<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//但是下面这个优先级较高的会执行</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>text<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> text <span style="color: #339933;">+</span> <span style="color: #3366CC;">'管不着我'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span>apply_filters<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'status'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'orzorz'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'-----------------------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'action测试'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'-----------------------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//下面是action</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'返回数据:'</span> <span style="color: #339933;">+</span>  a <span style="color: #339933;">+</span> b <span style="color: #339933;">+</span> c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//添加一个只会执行一次的action回调</span>
add_once_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'我只会执行一次的'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'俺的优先级比较高'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第一次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'1'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'2'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第二次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'4'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'5'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'6'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> b<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'全部屏蔽'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>end<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
log<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'----------第三次执行----------------'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
do_action<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ac_success'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'1'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'2'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/04/10/1084.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>例举js中组装类的好处</title>
		<link>http://bluehua.org/2010/04/01/1065.html</link>
		<comments>http://bluehua.org/2010/04/01/1065.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 14:42:22 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[augmentation]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[oo]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=1065</guid>
		<description><![CDATA[先举个简单的组装的例子 //纸 var paper = new Paper&#40;&#41;; //处理下 enable_fire_destory&#40;paper&#41;; //ok,可以燃烧了.. paper.fire&#40;&#41;; //猪 var pig = new Pig&#40;&#41;; enable_fire_destory&#40;pig&#41;; //不管怎么着,也能着了 pig.fire&#40;&#41;; 这种组装方式用于给毫不相关的对象快速添加一些通用的方法, 用法得当将节省大量代码~ 这里举个实际开发中的例子,下面的代码肯定是我们平时经常写的,用于防止一次ajax请求没有完毕就请求第二次 obj = &#123; .... is_loading : false, load_sth : function&#40;callback&#41; &#123; if &#40; this.is_loading &#41; return; this.is_loading = true; new Ajax&#40;&#123; url : 'xxx.php', onComplete : function&#40;&#41; This.is_loading = false; &#125;&#125;&#41;; &#125;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>先举个简单的组装的例子</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//纸</span>
<span style="color: #003366; font-weight: bold;">var</span> paper <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Paper<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//处理下</span>
enable_fire_destory<span style="color: #009900;">&#40;</span>paper<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//ok,可以燃烧了..</span>
paper.<span style="color: #660066;">fire</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//猪</span>
<span style="color: #003366; font-weight: bold;">var</span> pig <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Pig<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
enable_fire_destory<span style="color: #009900;">&#40;</span>pig<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//不管怎么着,也能着了</span>
pig.<span style="color: #660066;">fire</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这种组装方式用于给毫不相关的对象快速添加一些通用的方法, 用法得当将节省大量代码~</p>
<p>这里举个实际开发中的例子,下面的代码肯定是我们平时经常写的,用于防止一次ajax请求没有完毕就请求第二次</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;">obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
....
<span style="color: #660066;">is_loading</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
load_sth <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>callback<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_loading</span> <span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_loading</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">new</span> Ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'xxx.php'</span><span style="color: #339933;">,</span>
        onComplete <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000066; font-weight: bold;">This</span>.<span style="color: #660066;">is_loading</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
....
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>使用组装的方法改写</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//组装函数</span>
<span style="color: #003366; font-weight: bold;">function</span> enable_single_thread_ajax<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    extend<span style="color: #009900;">&#40;</span>obj<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        _is_ajax_ing <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        is_ajax_ing <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>._is_ajax_ing<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        ajax <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">is_ajax_ing</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066; font-weight: bold;">This</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">this</span>._is_ajax_ing <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #003366; font-weight: bold;">var</span> _tmp_func <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #006600; font-style: italic;">//为了保持ajax的参数不变,要做点小牺牲</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                _tmp_func <span style="color: #339933;">=</span> params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            params<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'onComplete'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                <span style="color: #000066; font-weight: bold;">This</span>._is_ajax_ing <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span> 
                _tmp_func.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000066; font-weight: bold;">return</span> Ajax<span style="color: #009900;">&#40;</span>params<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//还是那个对象 </span>
obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> 
load_sth <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//打完收工了~</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">:</span> <span style="color: #3366CC;">'xxx.php'</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//给对象扩充方法</span>
enable_single_thread_ajax<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>还可以直接扩展原型,达到扩充类的目的~,以前写过一篇自定义事件的文章,也是用的这种方法 : <a href="http://bluehua.org/2008/09/09/74.html">简单实现js里的自定义事件</a></p>
<p>今天特地翻开没怎么看的&lt;javascript设计模式&gt;,里面定义这种扩展方式为”掺元类”,感觉这么翻译不是特好理解&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/04/01/1065.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>一种字符串代替数组的场合</title>
		<link>http://bluehua.org/2010/02/25/982.html</link>
		<comments>http://bluehua.org/2010/02/25/982.html#comments</comments>
		<pubDate>Thu, 25 Feb 2010 09:22:57 +0000</pubDate>
		<dc:creator>冥王星2011</dc:creator>
				<category><![CDATA[web dev]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://bluehua.org/?p=982</guid>
		<description><![CDATA[曾经耍过一些小聪明,而且是相当然的,有人问我你做过验证吗,&#8230;.木有,然后也觉得自己很不靠普 下面是验证以前做一个选择器的时候用到的方法,主要是为了加速判断是否已选的操作 &#60;html&#62; &#60;script&#62; function ctime&#40;func&#41; &#123; var s = new Date&#40;&#41;.getTime&#40;&#41;; func&#40;&#41;; return new Date&#40;&#41;.getTime&#40;&#41; - s; &#125; var time; time = ctime&#40;function&#40;&#41; &#123; var i = 0; astr = &#91;&#93;; while &#40;i &#60; 10000&#41; &#123; astr.push&#40;'fasdfasdf'&#41;; i ++; &#125; &#125;&#41;; document.write&#40;time + '&#60;/br&#62;'&#41;; &#160; time = ctime&#40;function&#40;&#41; &#123; var i = 0; sstr [...]]]></description>
			<content:encoded><![CDATA[<p>曾经耍过一些小聪明,而且是相当然的,有人问我你做过验证吗,&#8230;.木有,然后也觉得自己很不靠普</p>
<p>下面是验证以前做一个选择器的时候用到的方法,主要是为了加速判断是否已选的操作</p>

<div class="wp_syntax"><div class="code overflow"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">function</span> ctime<span style="color: #009900;">&#40;</span>func<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    func<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> s<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> time<span style="color: #339933;">;</span>
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    astr <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">10000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        astr.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fasdfasdf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    sstr <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">10000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        sstr <span style="color: #339933;">=</span> sstr <span style="color: #339933;">+</span> <span style="color: #3366CC;">'fasdfasdf'</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> is_include<span style="color: #009900;">&#40;</span>arr<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> j <span style="color: #339933;">=</span> arr.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> j<span style="color: #339933;">;</span> i <span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>arr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> v<span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>is_include<span style="color: #009900;">&#40;</span>astr<span style="color: #339933;">,</span> <span style="color: #3366CC;">'12321423'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
time <span style="color: #339933;">=</span> ctime<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>sstr.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'12321423'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span>         
        i <span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>time <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&lt;/br&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>运行结果<br />
ie6:</p>
<pre>
20
1342
5699
280
</pre>
<p>ie8:</p>
<pre>
30
30
9163
441
</pre>
<p>ff3.6:</p>
<pre>
1
2
111
97
</pre>
]]></content:encoded>
			<wfw:commentRss>http://bluehua.org/2010/02/25/982.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.782 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-04 20:53:53 -->

