﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-没有眼泪-随笔分类-Ext</title><link>http://www.blogjava.net/zhangchao/category/30214.html</link><description>Don't Cry!</description><language>zh-cn</language><lastBuildDate>Wed, 30 Apr 2008 11:42:05 GMT</lastBuildDate><pubDate>Wed, 30 Apr 2008 11:42:05 GMT</pubDate><ttl>60</ttl><item><title>Ext2.0中的createDelegate方法.</title><link>http://www.blogjava.net/zhangchao/archive/2008/04/30/197562.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Wed, 30 Apr 2008 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/04/30/197562.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/197562.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/04/30/197562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/197562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/197562.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 项目中经常使用createDelegate()方法来创建代理函数,从而改变当前函数中this的作用域.看下了源码,发现是通过js中的apply()方法来实现,想想也只能通过apply()或者call()方法来实现,因为js中只有这2个方法提供了改变当前函数内部this作用域的功能.此外,Ext中很多地方用到了call()和apply()方法,要想看懂源码,则必须先搞清这2个方法的用法.<br />
&nbsp;&nbsp;&nbsp;&nbsp;createDelegate方法声明为:
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_48_716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_716_Open_Text.style.display='none'; Codehighlighter1_48_716_Closed_Image.style.display='inline'; Codehighlighter1_48_716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_48_716_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_48_716_Closed_Text.style.display='none'; Codehighlighter1_48_716_Open_Image.style.display='inline'; Codehighlighter1_48_716_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">createDelegate&nbsp;:&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(obj,&nbsp;args,&nbsp;appendArgs)</span><span id="Codehighlighter1_48_716_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_48_716_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;method&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_103_709_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_709_Open_Text.style.display='none'; Codehighlighter1_103_709_Closed_Image.style.display='inline'; Codehighlighter1_103_709_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_103_709_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_103_709_Closed_Text.style.display='none'; Codehighlighter1_103_709_Open_Image.style.display='inline'; Codehighlighter1_103_709_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;</span><span id="Codehighlighter1_103_709_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_103_709_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;callArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;args&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;arguments;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_186_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_186_319_Open_Text.style.display='none'; Codehighlighter1_186_319_Closed_Image.style.display='inline'; Codehighlighter1_186_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_186_319_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_186_319_Closed_Text.style.display='none'; Codehighlighter1_186_319_Open_Image.style.display='inline'; Codehighlighter1_186_319_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(appendArgs&nbsp;</span><span style="color: #000000">===</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)</span><span id="Codehighlighter1_186_319_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_186_319_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Array.prototype.slice.call(arguments,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;callArgs.concat(args);<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_358_641_Open_Image" onclick="this.style.display='none'; Codehighlighter1_358_641_Open_Text.style.display='none'; Codehighlighter1_358_641_Closed_Image.style.display='inline'; Codehighlighter1_358_641_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_358_641_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_358_641_Closed_Text.style.display='none'; Codehighlighter1_358_641_Open_Image.style.display='inline'; Codehighlighter1_358_641_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">&nbsp;appendArgs&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">number</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span id="Codehighlighter1_358_641_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_358_641_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Array.prototype.slice.call(arguments,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;copy&nbsp;arguments&nbsp;first</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;applyArgs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;[appendArgs,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">].concat(args);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;create&nbsp;method&nbsp;call&nbsp;params</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Array.prototype.splice.apply(callArgs,&nbsp;applyArgs);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;splice&nbsp;them&nbsp;in</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;method.apply(obj&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;window,&nbsp;callArgs);<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">,</span></div>
其中obj表示函数内部this作用域的范围,args是数组,appendArgs是"Boolean或Number",如果appendArgs是Boolean型的且值为true,那么args参数将跟在调用代理方法时传入的参数后面组成数组一起传入当前方法,否则只传入args,如果appendArgs为Number型,那么args将插入到appendArgs指定的位置.<br />
注意点:<br />
1.函数内部的arguments关键字是函数执行时动态创建的,用来存储调用函数时所传入参数.这里第4行的arguments&nbsp;&nbsp; 并不指调用createDelegate方法所传入的参数(obj,args,appendArgs),而是指调用return function()时所传入的参数,即调用代理函数时所传入的参数.而args和appendArgs就是调用createDelegate方法时所传入的参数.总的来说,函数是在定义它的作用域中执行,而不是在调用它的作用域中执行.但也有特殊,比如这里的arguments.<br />
2.call和apply的区别.<br />
二者的第一个参数都是函数内部this的作用域,call的参数只能作为一串参数传入,而apply可以传入数组或arguments对象.如<br />
fun.call(window,args0,args1,.....);<br />
fun.apply(window,[1,2,3]);<br />
但要注意的是apply方法传递到函数内部的参数实际也是作为一个个参数传递的.如果在fun内部测试arguments.length的话,则长度为3.同样,我们可以采用arguments[0],arguments[1],arguments[2]来分别引用1,2,3三个参数,而不是用arguments[0][0],arguments[0][1],arguments[0][2]来引用3个参数.这样才能解释11行的代码.
<img src ="http://www.blogjava.net/zhangchao/aggbug/197562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-04-30 17:11 <a href="http://www.blogjava.net/zhangchao/archive/2008/04/30/197562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ext中的namespace</title><link>http://www.blogjava.net/zhangchao/archive/2008/03/19/187372.html</link><dc:creator>zhangchao</dc:creator><author>zhangchao</author><pubDate>Wed, 19 Mar 2008 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/zhangchao/archive/2008/03/19/187372.html</guid><wfw:comment>http://www.blogjava.net/zhangchao/comments/187372.html</wfw:comment><comments>http://www.blogjava.net/zhangchao/archive/2008/03/19/187372.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangchao/comments/commentRss/187372.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangchao/services/trackbacks/187372.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext2.0中,Ext类有个namespace方法,该方法的作用是把传入的参数转换成对象.使用该方法的目的主要在于可以区分类名相同的类,这有点和java中的package作用类似.让我们先看下源码:
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img id="Codehighlighter1_22_374_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_374_Open_Text.style.display='none'; Codehighlighter1_22_374_Closed_Image.style.display='inline'; Codehighlighter1_22_374_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_374_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_22_374_Closed_Text.style.display='none'; Codehighlighter1_22_374_Open_Image.style.display='inline'; Codehighlighter1_22_374_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000;">namespace&nbsp;:&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()</span><span id="Codehighlighter1_22_374_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_22_374_Open_Text"><span style="color: #000000;">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">=</span><span style="color: #000000;">arguments,&nbsp;o</span><span style="color: #000000;">=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,&nbsp;i,&nbsp;j,&nbsp;d,&nbsp;rt;<br />
<img id="Codehighlighter1_97_372_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_372_Open_Text.style.display='none'; Codehighlighter1_97_372_Closed_Image.style.display='inline'; Codehighlighter1_97_372_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_97_372_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_97_372_Closed_Text.style.display='none'; Codehighlighter1_97_372_Open_Image.style.display='inline'; Codehighlighter1_97_372_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">a.length;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;</span><span id="Codehighlighter1_97_372_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_97_372_Open_Text"><span style="color: #000000;">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="color: #000000;">=</span><span style="color: #000000;">a[i].split(</span><span style="color: #000000;">"</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;d[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval('</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">&nbsp;'&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rt&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;'&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">undefined</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span id="Codehighlighter1_210_227_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_210_227_Open_Text"><span style="color: #000000;">{'&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rt&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;'&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span id="Codehighlighter1_224_225_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_224_225_Open_Text"><span style="color: #000000;">{}</span></span><span style="color: #000000;">;}</span></span><span style="color: #000000;">&nbsp;o&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rt&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;';');<br />
<img id="Codehighlighter1_298_366_Open_Image" onclick="this.style.display='none'; Codehighlighter1_298_366_Open_Text.style.display='none'; Codehighlighter1_298_366_Closed_Image.style.display='inline'; Codehighlighter1_298_366_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_298_366_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_298_366_Closed_Text.style.display='none'; Codehighlighter1_298_366_Open_Image.style.display='inline'; Codehighlighter1_298_366_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">d.length;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">j)&nbsp;</span><span id="Codehighlighter1_298_366_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_298_366_Open_Text"><span style="color: #000000;">{<br />
<img id="Codehighlighter1_331_332_Open_Image" onclick="this.style.display='none'; Codehighlighter1_331_332_Open_Text.style.display='none'; Codehighlighter1_331_332_Closed_Image.style.display='inline'; Codehighlighter1_331_332_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_331_332_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_331_332_Closed_Text.style.display='none'; Codehighlighter1_331_332_Open_Image.style.display='inline'; Codehighlighter1_331_332_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o[d[j]]</span><span style="color: #000000;">=</span><span style="color: #000000;">o[d[j]]&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;</span><span id="Codehighlighter1_331_332_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_331_332_Open_Text"><span style="color: #000000;">{}</span></span><span style="color: #000000;">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; o</span><span style="color: #000000;">=</span><span style="color: #000000;">o[d[j]];<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
从代码可以看出,如果我们传入的字符串参数是以"."分割的,那么将会创建多个对象,比如:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">Ext.namespace('system.corp');</span></div>
则会创建2个对象,相当于执行了下面的代码:
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img id="Codehighlighter1_9_10_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9_10_Open_Text.style.display='none'; Codehighlighter1_9_10_Closed_Image.style.display='inline'; Codehighlighter1_9_10_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_9_10_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_9_10_Closed_Text.style.display='none'; Codehighlighter1_9_10_Open_Image.style.display='inline'; Codehighlighter1_9_10_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000;">system&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span id="Codehighlighter1_9_10_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_9_10_Open_Text"><span style="color: #000000;">{}</span></span><span style="color: #000000;">;<br />
<img id="Codehighlighter1_27_28_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_28_Open_Text.style.display='none'; Codehighlighter1_27_28_Closed_Image.style.display='inline'; Codehighlighter1_27_28_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_28_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_27_28_Closed_Text.style.display='none'; Codehighlighter1_27_28_Open_Image.style.display='inline'; Codehighlighter1_27_28_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />system.corp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span id="Codehighlighter1_27_28_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_27_28_Open_Text"><span style="color: #000000;">{}</span></span><span style="color: #000000;">;</span></div>
这样,我们在自定义类的时候就能这样使用:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000;">Ext.namespace('system.corp');<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_67_87_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_87_Open_Text.style.display='none'; Codehighlighter1_67_87_Closed_Image.style.display='inline'; Codehighlighter1_67_87_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_87_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_67_87_Closed_Text.style.display='none'; Codehighlighter1_67_87_Open_Image.style.display='inline'; Codehighlighter1_67_87_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />system.corp.ManageCorp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()&nbsp;</span><span id="Codehighlighter1_67_87_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_67_87_Open_Text"><span style="color: #000000;">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">dosomething</span><span style="color: #008000;"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000;">}</span></span></div>
如果还想定义一个同名的类,那么可以就使用不同的namespace来区分,这样2个类就不会冲突了:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><span style="color: #000000;">Ext.namespace('system.admin');<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" alt="" align="top" /><br />
<img id="Codehighlighter1_69_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_89_Open_Text.style.display='none'; Codehighlighter1_69_89_Closed_Image.style.display='inline'; Codehighlighter1_69_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" align="top" /><img id="Codehighlighter1_69_89_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_69_89_Closed_Text.style.display='none'; Codehighlighter1_69_89_Open_Image.style.display='inline'; Codehighlighter1_69_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" alt="" align="top" />system.admin.ManageCorp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()&nbsp;</span><span id="Codehighlighter1_69_89_Closed_Text" style="border: 1px solid #808080; display: none; background-color: #ffffff;"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_69_89_Open_Text"><span style="color: #000000;">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" alt="" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">dosomething</span><span style="color: #008000;"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top" /></span><span style="color: #000000;">}</span></span></div>
<br />
此外,注意源码中"eval"方法的使用,如果有需要可以采用这种方式来解决问题.
<img src ="http://www.blogjava.net/zhangchao/aggbug/187372.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangchao/" target="_blank">zhangchao</a> 2008-03-19 22:24 <a href="http://www.blogjava.net/zhangchao/archive/2008/03/19/187372.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>