<?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; namespace</title>
	<atom:link href="http://www.ilovejs.net/archives/tag/namespace/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ilovejs.net</link>
	<description>到了创造为主的阶段，不忘继续学习</description>
	<lastBuildDate>Thu, 15 Dec 2011 06:18:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>一种有意思的编写js方式</title>
		<link>http://www.ilovejs.net/archives/88</link>
		<comments>http://www.ilovejs.net/archives/88#comments</comments>
		<pubDate>Fri, 25 Dec 2009 12:46:23 +0000</pubDate>
		<dc:creator>Supersha</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[namespace]]></category>

		<guid isPermaLink="false">http://www.ilovejs.net/?p=88</guid>
		<description><![CDATA[前些日子关注到了Javascript内核对对象内点语法的解析机制的一点点了解，为此本人在这里总结一下，也顺便up两个有点意思的Javascript方法。 Javascript的对象中如果遇到的点符号“.”，就会首先检查它全部包含的方法和属性，直到检查到点符号后面指定的方法或者属性。从这点出发，如果对象中嵌套的级别越多，这对频繁操作对象中的属性和方法就非常影响执行效率了。 下面是一个using方法，这个跟C#里的using方法的调用方式类似： [javascript] using(LIB.dom.classes).behavior(function(){ this.add=function(c){ this.classname=c; } //&#8230;&#8230; } //它还有另外一种调用方式： using(LIB.dom.classes,function(){ this.add=function(c){ this.classname=c; } //&#8230;&#8230; }); //using上面的两种方式可以互换操作，就是对同一个对象可以在两种方式中使用，比如： //LIB.namespace是我接下来要说明的一个函数 LIB.namespace(&#34;dom.event&#34;); &#8230; <a href="http://www.ilovejs.net/archives/88" class="more-link">了解更多</a>]]></description>
			<content:encoded><![CDATA[<p>前些日子关注到了Javascript内核对对象内点语法的解析机制的一点点了解，为此本人在这里总结一下，也顺便up两个有点意思的Javascript方法。
</p>
<p>
<strong>Javascript的对象中如果遇到的点符号“.”，就会首先检查它全部包含的方法和属性，直到检查到点符号后面指定的方法或者属性。从这点出发，如果对象中嵌套的级别越多，这对频繁操作对象中的属性和方法就非常影响执行效率了。</strong>
</p>
<p>下面是一个using方法，这个跟C#里的using方法的调用方式类似：<br />
[javascript]<br />
using(LIB.dom.classes).behavior(function(){<br />
     this.add=function(c){<br />
          this.classname=c;<br />
     }<br />
     //&#8230;&#8230;<br />
 } </p>
<p>//它还有另外一种调用方式：<br />
using(LIB.dom.classes,function(){<br />
      this.add=function(c){<br />
          this.classname=c;<br />
      }<br />
      //&#8230;&#8230;<br />
}); </p>
<p>//using上面的两种方式可以互换操作，就是对同一个对象可以在两种方式中使用，比如： </p>
<p>//LIB.namespace是我接下来要说明的一个函数<br />
LIB.namespace(&quot;dom.event&quot;);<br />
using(LIB.dom.event,function(){<br />
     this.show=function(){<br />
     alert(&quot;Hello&quot;);<br />
     };<br />
});  </p>
<p>using(LIB.dom.event).behavior(function(){<br />
     this.show();<br />
});<br />
[/javascript]</p>
<p>现在我们来看看namespace方法的使用，namespace的作用已经不是什么新鲜事了，很多库中都使用了这种操作方法，比如Google的<a href="http://code.google.com/intl/zh-CN/closure/library/">closure-library</a>库中就大量使用了这种操作方式。<span id="more-88"></span>上面的LIB.namespace(“dom.event”)调用之后，就会添加到LIB对象中作为命名空间，一级一级的添加。下面是源码：</p>
<p>[javascript]<br />
try {LIB} catch (e) { LIB = {}}<br />
LIB.namespace = function(s){<br />
    var names = s &amp;&amp; typeof s.split === &quot;function&quot; ? s.split(&quot;.&quot;) : [];<br />
    var current=LIB;<br />
    for(var i=0,l=names.length;i&lt;l;i++){<br />
          if(!current[names[i]]){<br />
              current[names[i]]={};<br />
          }<br />
          current=current[names[i]];<br />
    }<br />
};<br />
(function(global){<br />
    function _u(obj, fn){<br />
        fn ? fn.call(obj) : this.o = obj;<br />
    }<br />
    global.using = function(o, f){<br />
        if (f) {<br />
            return _u(o, f);<br />
        } else {<br />
            _u.prototype.behavior = function(f){<br />
                f.call(this.o);<br />
            }<br />
            return new _u(o);<br />
        }<br />
    }<br />
})(this);<br />
[/javascript]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ilovejs.net/archives/88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

