Files
rappaurio-sae501_502/app/node_modules/cejs/_documents/JsDoc/symbols/src/D__USB_cgi-bin_lib_JS_plugin_old.class template.origin.js.html
2023-09-25 13:27:24 +02:00

489 lines
67 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style>
.KEYW {color: #933;}
.COMM {color: #bbb; font-style: italic;}
.NUMB {color: #393;}
.STRN {color: #393;}
.REGX {color: #339;}
.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
</style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="WHIT">
<span class='line'> 2</span> </span><span class="COMM">/*
<span class='line'> 3</span>
<span class='line'> 4</span> ******** class template ********
<span class='line'> 5</span>
<span class='line'> 6</span>
<span class='line'> 7</span> =function(){}()
<span class='line'> 8</span> 似乎亦可,見 SWFObject 2.2
<span class='line'> 9</span> */</span><span class="WHIT">
<span class='line'> 10</span>
<span class='line'> 11</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">ClassT</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// class template set 讓 addCode 也可以讀通</span><span class="WHIT">
<span class='line'> 12</span>
<span class='line'> 13</span>
<span class='line'> 14</span>
<span class='line'> 15</span> </span><span class="COMM">// ===================================================</span><span class="WHIT">
<span class='line'> 16</span> </span><span class="COMM">/*
<span class='line'> 17</span> ** class description: class template (simple version)
<span class='line'> 18</span>
<span class='line'> 19</span> _=this
<span class='line'> 20</span>
<span class='line'> 21</span> TODO:
<span class='line'> 22</span>
<span class='line'> 23</span>
<span class='line'> 24</span> HISTORY:
<span class='line'> 25</span> 2008/7/21 16:12:32 create
<span class='line'> 26</span> */</span><span class="WHIT">
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT">
<span class='line'> 28</span> </span><span class="NAME">classT</span><span class="PUNC">=</span><span class="WHIT">
<span class='line'> 29</span>
<span class='line'> 30</span> </span><span class="PUNC">(</span><span class="NAME">ClassT.classT</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">initF</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 31</span>
<span class='line'> 32</span> </span><span class="KEYW">var</span><span class="WHIT">
<span class='line'> 33</span>
<span class='line'> 34</span> </span><span class="COMM">// class private -----------------------------------</span><span class="WHIT">
<span class='line'> 35</span>
<span class='line'> 36</span>
<span class='line'> 37</span> </span><span class="COMM">// instance constructor ---------------------------</span><span class="WHIT">
<span class='line'> 38</span> </span><span class="NAME">instanceL</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'> 39</span> </span><span class="NAME">initI</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 40</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">_p</span><span class="PUNC">=</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="WHIT"> </span><span class="NAME">instanceL.push</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// for destructor</span><span class="WHIT">
<span class='line'> 42</span> </span><span class="WHIT"> </span><span class="COMM">//_p.vars=a</span><span class="WHIT">
<span class='line'> 43</span>
<span class='line'> 44</span> </span><span class="WHIT"> </span><span class="COMM">// initial instance object</span><span class="WHIT">
<span class='line'> 45</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">_</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">initI.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">initF</span><span class="PUNC">&&</span><span class="NAME">initF.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'> 46</span>
<span class='line'> 47</span>
<span class='line'> 48</span> </span><span class="COMM">// (instance private handle) 不要 instance private 的把這函數刪掉即可。</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="NAME">_p</span><span class="PUNC">=</span><span class="STRN">'_'</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="STRN">''</span><span class="PUNC">+</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\./</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="COMM">// get private variables (instance[,destroy]), init private variables (instance[,access function list[, instance destructor]])</span><span class="WHIT">
<span class='line'> 51</span> </span><span class="NAME">pv</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">V</span><span class="PUNC">,</span><span class="NAME">K</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'k'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">arguments.callee.caller</span><span class="PUNC">===</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'i'</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">V.O</span><span class="PUNC">=</span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">V.L</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="PUNC">(</span><span class="NAME">K</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">i</span><span class="PUNC">===</span><span class="NAME">V.O</span><span class="PUNC">?</span><span class="NAME">d</span><span class="PUNC">?</span><span class="PUNC">(</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">V.L</span><span class="PUNC">:</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 52</span>
<span class='line'> 53</span> </span><span class="COMM">// class destructor ---------------------------</span><span class="WHIT">
<span class='line'> 54</span> </span><span class="COMM">/*
<span class='line'> 55</span> please call at last (e.g., window.unload)
<span class='line'> 56</span>
<span class='line'> 57</span> usage:
<span class='line'> 58</span> classT=classT.destroy();
<span class='line'> 59</span> or if you has something more to do:
<span class='line'> 60</span> classT.destroy()&&classT=null;
<span class='line'> 61</span> */</span><span class="WHIT">
<span class='line'> 62</span>
<span class='line'> 63</span> </span><span class="NAME">_.destroy</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">l</span><span class="PUNC">=</span><span class="NAME">instanceL.length</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">l</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="NAME">instanceL</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">destroy</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 64</span>
<span class='line'> 65</span> </span><span class="COMM">// (instance private handle, continue)</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="NAME">eval</span><span class="PUNC">(</span><span class="STRN">'_p=(function(){var '</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'={a:pv,d:_.destroy,c:0,k:"+pv+'</span><span class="PUNC">+</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">'",i:initI};return function(i,d){var f=arguments.callee.caller;if(f==='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.a){if(!d)return i in '</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'?'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i]:('</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.c++]={},i);'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i]={};}if(f==='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.d)'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'={};}})();'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="NAME">_p.toString</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="STRN">''</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 68</span>
<span class='line'> 69</span>
<span class='line'> 70</span> </span><span class="COMM">// class public interface ---------------------------</span><span class="WHIT">
<span class='line'> 71</span>
<span class='line'> 72</span> </span><span class="COMM">// func</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="NAME">_.func</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='line'> 76</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 77</span>
<span class='line'> 78</span> </span><span class="COMM">// class constructor ---------------------------</span><span class="WHIT">
<span class='line'> 79</span>
<span class='line'> 80</span> </span><span class="COMM">// do something others</span><span class="WHIT">
<span class='line'> 81</span>
<span class='line'> 82</span>
<span class='line'> 83</span> </span><span class="NAME">_.prototype</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 84</span> </span><span class="COMM">// 應該盡量把東西放在 classinstance 少一點…?</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="COMM">// ** important ** 這邊不能作 object 之 initialization否則因為 object 只會 copy reference因此 new 時東西會一樣。initialization 得在 _() 中作!</span><span class="WHIT">
<span class='line'> 86</span>
<span class='line'> 87</span> </span><span class="COMM">// instance public interface -------------------</span><span class="WHIT">
<span class='line'> 88</span>
<span class='line'> 89</span> </span><span class="NAME">setV</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 90</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">_p</span><span class="PUNC">=</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 91</span> </span><span class="WHIT"> </span><span class="COMM">//_p.vars=a</span><span class="WHIT">
<span class='line'> 92</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'> 93</span>
<span class='line'> 94</span>
<span class='line'> 95</span> </span><span class="COMM">// instance destructor ---------------------------</span><span class="WHIT">
<span class='line'> 96</span> </span><span class="COMM">/*
<span class='line'> 97</span> usage:
<span class='line'> 98</span> instance=instance.destroy();
<span class='line'> 99</span> or if you has something more to do:
<span class='line'>100</span> instance.destroy()&&instance=null;
<span class='line'>101</span> */</span><span class="WHIT">
<span class='line'>102</span> </span><span class="NAME">destroy</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>103</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// _.prototype=</span><span class="WHIT">
<span class='line'>104</span>
<span class='line'>105</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">_</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>106</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// function(initF){</span><span class="WHIT">
<span class='line'>107</span>
<span class='line'>108</span> </span><span class="COMM">// ===================================================</span><span class="WHIT">
<span class='line'>109</span>
<span class='line'>110</span>
<span class='line'>111</span>
<span class='line'>112</span>
<span class='line'>113</span>
<span class='line'>114</span>
<span class='line'>115</span> </span><span class="COMM">// 解析</span><span class="WHIT">
<span class='line'>116</span>
<span class='line'>117</span>
<span class='line'>118</span>
<span class='line'>119</span> </span><span class="COMM">// ===================================================</span><span class="WHIT">
<span class='line'>120</span>
<span class='line'>121</span> </span><span class="COMM">/*
<span class='line'>122</span> ** class description: class template
<span class='line'>123</span>
<span class='line'>124</span> _=this
<span class='line'>125</span>
<span class='line'>126</span> TODO:
<span class='line'>127</span> .constructor 設定
<span class='line'>128</span> inherits:
<span class='line'>129</span> http://www.cnblogs.com/birdshome/archive/2005/01/28/95933.html
<span class='line'>130</span> http://www.blogjava.net/zkjbeyond/archive/2006/05/08/45108.html
<span class='line'>131</span>
<span class='line'>132</span>
<span class='line'>133</span> HISTORY:
<span class='line'>134</span> 2008/7/21 16:12:32 create
<span class='line'>135</span> 7/24 15:14:16 enhanced by set .toString. But.. If we use delete _p.toString, than we still can..
<span class='line'>136</span> eval('a = pv',some_instance);
<span class='line'>137</span> eval('var s=_p.toString;delete _p.toString;sl("** test1 _p: "+_p);_p.toString=s;sl("** test2 _p: "+_p);',a);
<span class='line'>138</span> 7/26 11:38:6 className
<span class='line'>139</span>
<span class='line'>140</span> TOTRY:
<span class='line'>141</span> 直接對 eval 下手,使 delete 掉 eval 則 lost data
<span class='line'>142</span> */</span><span class="WHIT">
<span class='line'>143</span> </span><span class="KEYW">var</span><span class="WHIT">
<span class='line'>144</span> </span><span class="NAME">classT_debug</span><span class="PUNC">=</span><span class="WHIT">
<span class='line'>145</span>
<span class='line'>146</span> </span><span class="COMM">// 若是不須讓 addCode 也可以讀通,不加 ClassT.~ 也沒關係。</span><span class="WHIT">
<span class='line'>147</span> </span><span class="PUNC">(</span><span class="NAME">ClassT.classT</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">initF</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// initF: additional initialization function</span><span class="WHIT">
<span class='line'>148</span>
<span class='line'>149</span> </span><span class="KEYW">var</span><span class="WHIT">
<span class='line'>150</span>
<span class='line'>151</span> </span><span class="COMM">// class private -----------------------------------</span><span class="WHIT">
<span class='line'>152</span> </span><span class="NAME">className</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">,</span><span class="COMM">//classT</span><span class="WHIT">
<span class='line'>153</span>
<span class='line'>154</span> </span><span class="COMM">// variables</span><span class="WHIT">
<span class='line'>155</span> </span><span class="NAME">vars</span><span class="PUNC">=</span><span class="NUMB">7</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>156</span> </span><span class="COMM">// function</span><span class="WHIT">
<span class='line'>157</span> </span><span class="NAME">doLog</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>158</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="NAME">_</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>159</span> </span><span class="WHIT"> </span><span class="NAME">sl</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">className</span><span class="PUNC">?</span><span class="NAME">className</span><span class="PUNC">+</span><span class="STRN">': '</span><span class="PUNC">:</span><span class="STRN">'>> '</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// this+': '</span><span class="WHIT">
<span class='line'>160</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>161</span>
<span class='line'>162</span>
<span class='line'>163</span>
<span class='line'>164</span> </span><span class="COMM">// instance constructor ---------------------------</span><span class="WHIT">
<span class='line'>165</span> </span><span class="NAME">instanceL</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="COMM">// 實例 list</span><span class="WHIT">
<span class='line'>166</span> </span><span class="NAME">initI</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="COMM">// 這裡面有用的是 this不是 arguments.callee。</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT"> </span><span class="NAME">_p</span><span class="PUNC">=</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">//pv(_t,[func1,func2,..],_.destroy); // init private variables</span><span class="WHIT">
<span class='line'>169</span> </span><span class="WHIT"> </span><span class="NAME">instanceL.push</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// for destructor</span><span class="WHIT">
<span class='line'>170</span>
<span class='line'>171</span> </span><span class="WHIT"> </span><span class="COMM">// initial instance object</span><span class="WHIT">
<span class='line'>172</span> </span><span class="WHIT"> </span><span class="NAME">_t.property1</span><span class="PUNC">=</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>173</span>
<span class='line'>174</span> </span><span class="WHIT"> </span><span class="NAME">_t.testV</span><span class="PUNC">=</span><span class="NAME">a</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>175</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'class create: '</span><span class="PUNC">+</span><span class="NAME">a</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>176</span>
<span class='line'>177</span> </span><span class="WHIT"> </span><span class="COMM">//return this;</span><span class="WHIT">
<span class='line'>178</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>179</span>
<span class='line'>180</span> </span><span class="COMM">// 盡量減少 instance 體積…有用嗎?</span><span class="WHIT">
<span class='line'>181</span> </span><span class="NAME">_</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>182</span> </span><span class="WHIT"> </span><span class="NAME">initI.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>183</span> </span><span class="WHIT"> </span><span class="NAME">initF</span><span class="PUNC">&&</span><span class="NAME">initF.apply</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">arguments</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>184</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>185</span>
<span class='line'>186</span>
<span class='line'>187</span> </span><span class="COMM">// (instance private handle) 不要 instance private 的把這函數刪掉即可。</span><span class="WHIT">
<span class='line'>188</span> </span><span class="COMM">/*
<span class='line'>189</span> 更完整的防治:比對 arguments.callee.caller 的程式碼,確定登錄過才給予存取。
<span class='line'>190</span> …在 eval() 的第二 argument 下無用武之地。
<span class='line'>191</span> */</span><span class="WHIT">
<span class='line'>192</span>
<span class='line'>193</span> </span><span class="NAME">_p</span><span class="PUNC">=</span><span class="STRN">'_'</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="STRN">''</span><span class="PUNC">+</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\./</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>194</span>
<span class='line'>195</span> </span><span class="NAME">pv</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">,</span><span class="NAME">k</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// get private variables (instance[,destroy]), init private variables (instance[,access function list[, instance destructor]])</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">V</span><span class="PUNC">,</span><span class="NAME">K</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'k'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>197</span> </span><span class="COMM">/* V: get variables
<span class='line'>198</span>
<span class='line'>199</span> V.L variables {}
<span class='line'>200</span> V.O instance
<span class='line'>201</span>
<span class='line'>202</span> for full version:
<span class='line'>203</span> V.F 可存取函數的程式碼 list {}
<span class='line'>204</span> V.D instance destructor
<span class='line'>205</span> */</span><span class="WHIT">
<span class='line'>206</span>
<span class='line'>207</span> </span><span class="COMM">// simple version</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">arguments.callee.caller</span><span class="PUNC">===</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'i'</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">V.O</span><span class="PUNC">=</span><span class="NAME">i</span><span class="PUNC">,</span><span class="NAME">V.L</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="PUNC">(</span><span class="NAME">K</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">i</span><span class="PUNC">===</span><span class="NAME">V.O</span><span class="PUNC">?</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">?</span><span class="PUNC">(</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">V.L</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT"> </span><span class="PUNC">:</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 竄改就會出 trouble</span><span class="WHIT">
<span class='line'>213</span>
<span class='line'>214</span>
<span class='line'>215</span> </span><span class="COMM">// full version</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">c</span><span class="PUNC">=</span><span class="NAME">arguments.callee.caller</span><span class="PUNC">,</span><span class="NAME">j</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">l</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'pv: '</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">===</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'i'</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="STRN">'init'</span><span class="PUNC">:</span><span class="NAME">d</span><span class="PUNC">?</span><span class="STRN">'destory'</span><span class="PUNC">:</span><span class="STRN">'get variables'</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">' by '</span><span class="PUNC">+</span><span class="NAME">c</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">c</span><span class="PUNC">===</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'i'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>219</span> </span><span class="WHIT"> </span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT"> </span><span class="NAME">V.O</span><span class="PUNC">=</span><span class="NAME">i</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">)</span><span class="NAME">V.D</span><span class="PUNC">=</span><span class="NAME">k</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// instance destructor</span><span class="WHIT">
<span class='line'>222</span> </span><span class="WHIT"> </span><span class="COMM">// 登錄可存取函數的程式碼。更狠的:不用 {} 而用 d確定是 *完全相同* 的 function。</span><span class="WHIT">
<span class='line'>223</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="WHIT"> </span><span class="KEYW">instanceof</span><span class="WHIT"> </span><span class="NAME">Array</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// []: no access!!</span><span class="WHIT">
<span class='line'>224</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">=</span><span class="NAME">V.F</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">,</span><span class="NAME">l</span><span class="PUNC">=</span><span class="NAME">d.length</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">&lt;</span><span class="NAME">l</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>225</span> </span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">[</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">j</span><span class="PUNC">]</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>226</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">V.L</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>227</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>228</span>
<span class='line'>229</span> </span><span class="WHIT"> </span><span class="COMM">// 預防竄改,找尋本來應該的 index。</span><span class="WHIT">
<span class='line'>230</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">K</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">||</span><span class="NAME">i</span><span class="PUNC">!==</span><span class="NAME">V.O</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>231</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">k</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="STRN">'c'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">&lt;</span><span class="NAME">k</span><span class="PUNC">;</span><span class="NAME">j</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>232</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">===</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">O</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'pv: correct index: '</span><span class="PUNC">+</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="STRN">' to '</span><span class="PUNC">+</span><span class="NAME">j</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">=</span><span class="NAME">j</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>236</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>237</span>
<span class='line'>238</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">K</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">V</span><span class="PUNC">=</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">&&</span><span class="NAME">i</span><span class="PUNC">===</span><span class="NAME">V.O</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>239</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>240</span> </span><span class="WHIT"> </span><span class="COMM">// call from instance destructor</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">V.D</span><span class="PUNC">||</span><span class="NAME">c</span><span class="PUNC">===</span><span class="NAME">V.D</span><span class="PUNC">)</span><span class="NAME">_p</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="KEYW">delete</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT"> </span><span class="COMM">//else throw new Error(3,'Error calling to destroy.');</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">V.F</span><span class="PUNC">||</span><span class="NAME">V.F</span><span class="PUNC">[</span><span class="NAME">c</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'pv: get index '</span><span class="PUNC">+</span><span class="NAME">i</span><span class="PUNC">[</span><span class="NAME">K</span><span class="PUNC">]</span><span class="PUNC">+</span><span class="STRN">'.'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT"> </span><span class="COMM">//if(!V.L)throw new Error(1,'Error to get variables! Maybe it was already destroyed?');//private variables</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">V.L</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>248</span>
<span class='line'>249</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// throw new Error(1,'Illegal access!');</span><span class="WHIT">
<span class='line'>250</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// of pv=function(</span><span class="WHIT">
<span class='line'>251</span>
<span class='line'>252</span>
<span class='line'>253</span> </span><span class="COMM">// (for inherits)</span><span class="WHIT">
<span class='line'>254</span> </span><span class="COMM">/*
<span class='line'>255</span> 不要 inherit 的把這段刪掉即可。
<span class='line'>256</span> usage:
<span class='line'>257</span> // 模擬 inherits
<span class='line'>258</span> newClass=oldClass.clone();
<span class='line'>259</span> // prevent re-use. 防止再造
<span class='line'>260</span> delete oldClass.clone;
<span class='line'>261</span> */</span><span class="WHIT">
<span class='line'>262</span> </span><span class="PUNC">(</span><span class="NAME">_.clone</span><span class="PUNC">=</span><span class="NAME">arguments.callee</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">toString</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'[class_template]'</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>263</span>
<span class='line'>264</span>
<span class='line'>265</span> </span><span class="COMM">// class destructor ---------------------------</span><span class="WHIT">
<span class='line'>266</span> </span><span class="COMM">/*
<span class='line'>267</span> please call at last (e.g., window.unload)
<span class='line'>268</span>
<span class='line'>269</span> usage:
<span class='line'>270</span> classT=classT.destroy();
<span class='line'>271</span> or if you has something more to do:
<span class='line'>272</span> classT.destroy()&&classT=null;
<span class='line'>273</span> */</span><span class="WHIT">
<span class='line'>274</span>
<span class='line'>275</span> </span><span class="NAME">_.destroy</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>276</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'destroy: Destroy class.'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>277</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="PUNC">(</span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">l</span><span class="PUNC">=</span><span class="NAME">instanceL.length</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">l</span><span class="PUNC">;</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>278</span> </span><span class="WHIT"> </span><span class="NAME">instanceL</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">destroy</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>279</span> </span><span class="WHIT"> </span><span class="NAME">_p</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>280</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>281</span>
<span class='line'>282</span>
<span class='line'>283</span> </span><span class="COMM">// class public interface ---------------------------</span><span class="WHIT">
<span class='line'>284</span>
<span class='line'>285</span> </span><span class="COMM">// variables</span><span class="WHIT">
<span class='line'>286</span> </span><span class="NAME">_.variables</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>287</span> </span><span class="COMM">// func</span><span class="WHIT">
<span class='line'>288</span> </span><span class="NAME">_.func</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>289</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>290</span> </span><span class="WHIT"> </span><span class="WHIT">
<span class='line'>291</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>292</span>
<span class='line'>293</span>
<span class='line'>294</span> </span><span class="COMM">// (instance private handle, continue)</span><span class="WHIT">
<span class='line'>295</span> </span><span class="COMM">// .a: accessable caller function, .d: class destructor, c:count, .k: private variables keyword, .i: init function, m: accessable class members</span><span class="WHIT">
<span class='line'>296</span> </span><span class="COMM">// destructor: (index,1) Warning: 某些環境中 Array 可能無法用 delete?</span><span class="WHIT">
<span class='line'>297</span> </span><span class="NAME">eval</span><span class="PUNC">(</span><span class="STRN">'_p=(function(){var '</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'={a:pv,d:_.destroy,c:0,k:"+pv+'</span><span class="PUNC">+</span><span class="NAME">Math.random</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">'",i:initI,m:{_:{}}}; (function(m,i){for(i=0;i&lt;m.length;i++)if(m[i])'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.m[m[i]]=1;})(['</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT"> </span><span class="COMM">//'func1,func2' // 在這裡填上需要 call 隱藏數值的 class private function。若無可考慮合併到 _.destroy 前。</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT"> </span><span class="PUNC">+</span><span class="STRN">']); return function(i,d){var f=arguments.callee.caller;if(f==='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.a){if(!d)return i in '</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'?'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i]:('</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.c++]={},i);'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'[i]={};}if('</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.m[f])return '</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.m._;if(f==='</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'.d)'</span><span class="PUNC">+</span><span class="NAME">_p</span><span class="PUNC">+</span><span class="STRN">'={};}})();'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="NAME">_p.toString</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span>
<span class='line'>302</span>
<span class='line'>303</span> </span><span class="COMM">// class constructor ---------------------------</span><span class="WHIT">
<span class='line'>304</span>
<span class='line'>305</span> </span><span class="COMM">// do something others</span><span class="WHIT">
<span class='line'>306</span>
<span class='line'>307</span>
<span class='line'>308</span> </span><span class="NAME">_.prototype</span><span class="PUNC">=</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>309</span> </span><span class="COMM">// 應該盡量把東西放在 classinstance 少一點…?</span><span class="WHIT">
<span class='line'>310</span>
<span class='line'>311</span> </span><span class="COMM">// instance public interface -------------------</span><span class="WHIT">
<span class='line'>312</span>
<span class='line'>313</span> </span><span class="COMM">// ** important ** 這邊不能作 object 之 initialization否則因為 object 只會 copy reference因此 new 時東西會一樣。initialization 得在 _() 中作!</span><span class="WHIT">
<span class='line'>314</span> </span><span class="NAME">property1</span><span class="PUNC">:</span><span class="PUNC">[</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>315</span>
<span class='line'>316</span> </span><span class="NAME">setV</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">_p</span><span class="PUNC">=</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>318</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'setV: class vars='</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">vars</span><span class="PUNC">=</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="STRN">', this.vars='</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">_p.vars</span><span class="PUNC">=</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>319</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>320</span>
<span class='line'>321</span> </span><span class="NAME">getV</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>322</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">_t</span><span class="PUNC">=</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NAME">_p</span><span class="PUNC">=</span><span class="NAME">pv</span><span class="PUNC">(</span><span class="NAME">_t</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>323</span> </span><span class="WHIT"> </span><span class="NAME">doLog</span><span class="PUNC">(</span><span class="STRN">'getV: class vars='</span><span class="PUNC">+</span><span class="NAME">vars</span><span class="PUNC">+</span><span class="STRN">', this.vars='</span><span class="PUNC">+</span><span class="NAME">_p.vars</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>324</span> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>325</span>
<span class='line'>326</span>
<span class='line'>327</span> </span><span class="COMM">// instance destructor ---------------------------</span><span class="WHIT">
<span class='line'>328</span>
<span class='line'>329</span> </span><span class="COMM">/*
<span class='line'>330</span> usage:
<span class='line'>331</span> instance=instance.destroy();
<span class='line'>332</span> or if you has something more to do:
<span class='line'>333</span> instance.destroy()&&instance=null;
<span class='line'>334</span>
<span class='line'>335</span> TODO: Need *auto* detect if the object is destroyed.
<span class='line'>336</span> */</span><span class="WHIT">
<span class='line'>337</span> </span><span class="NAME">destroy</span><span class="PUNC">:</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>338</span> </span><span class="WHIT"> </span><span class="COMM">// If you need to do something (e.g, destroy sub-sub-objects) before destroy it, you need to call pv(this) first here.</span><span class="WHIT">
<span class='line'>339</span> </span><span class="WHIT"> </span><span class="NAME">pv</span><span class="PUNC">(</span><span class="KEYW">this</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>340</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>341</span>
<span class='line'>342</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// _.prototype=</span><span class="WHIT">
<span class='line'>343</span>
<span class='line'>344</span> </span><span class="COMM">// class name ---------------------------</span><span class="WHIT">
<span class='line'>345</span> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">className</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>346</span> </span><span class="WHIT"> </span><span class="NAME">_.prototype.toString</span><span class="PUNC">=</span><span class="NAME">_.toString</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="STRN">'[class '</span><span class="PUNC">+</span><span class="NAME">className</span><span class="PUNC">+</span><span class="STRN">']'</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="PUNC">;</span><span class="COMM">//classT</span><span class="WHIT">
<span class='line'>347</span> </span><span class="WHIT"> </span><span class="COMM">//eval('var className=_',this); // 行不通</span><span class="WHIT">
<span class='line'>348</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>349</span>
<span class='line'>350</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">_</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>351</span> </span><span class="PUNC">}</span><span class="PUNC">)</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// (function(){</span><span class="WHIT">
<span class='line'>352</span>
<span class='line'>353</span>
<span class='line'>354</span> </span><span class="COMM">// ===================================================</span><span class="WHIT">
<span class='line'>355</span>
<span class='line'>356</span>
<span class='line'>357</span> </span><span class="COMM">/*
<span class='line'>358</span> // test suit
<span class='line'>359</span> sl('&lt;hr/>');
<span class='line'>360</span> var c1=new classT(123),c2=new classT(456);
<span class='line'>361</span>
<span class='line'>362</span> c1.setV('Hello');
<span class='line'>363</span> c2.setV('World');
<span class='line'>364</span> c1.getV();
<span class='line'>365</span> c2.getV();
<span class='line'>366</span>
<span class='line'>367</span> sl(c1.testV+','+c2.testV);
<span class='line'>368</span>
<span class='line'>369</span> c1.destroy();
<span class='line'>370</span> c2.destroy();
<span class='line'>371</span> classT.destroy();
<span class='line'>372</span> */</span><span class="WHIT">
<span class='line'>373</span>
<span class='line'>374</span>
<span class='line'>375</span>
<span class='line'>376</span>
<span class='line'>377</span>
<span class='line'>378</span> </span><span class="COMM">/*
<span class='line'>379</span> 繼承
<span class='line'>380</span> http://www.cnblogs.com/birdshome/archive/2005/01/28/95933.html
<span class='line'>381</span>
<span class='line'>382</span>
<span class='line'>383</span> 引入arguments.length這代表傳入引數個數長度arguments.callee.length這代表(function)自身定義的引數個數(長度)
<span class='line'>384</span> function fn(){
<span class='line'>385</span> var _f=arguments.callee; // f: function, flag 引入arguments.callee這代表(function)自身
<span class='line'>386</span> // 以 _f.* 替代 fn.*
<span class='line'>387</span> alert('fn: _f.val='+_f.val);
<span class='line'>388</span> }
<span class='line'>389</span> fn.subfn=function(){
<span class='line'>390</span> var _f=arguments.callee; // function, flag
<span class='line'>391</span> // 當不用 new 時,以 _f.* 替代 fn.subfn.*this.* 替代 fn.*。但在 (fn.subfn=function(){ .. }) 中間就不能用 this, _f
<span class='line'>392</span> alert('fn.subfn: this.val='+this.val); // *** !!WARNING!! 在 eval() 中 this 可能表示 window這時就無法用 this 來得到 fn 了。
<span class='line'>393</span> alert('fn.subfn: _f.val='+_f.val);
<span class='line'>394</span> };
<span class='line'>395</span> fn.subfn.val='test value: fn.subfn.val';
<span class='line'>396</span> fn.val='test value: fn.val';
<span class='line'>397</span> fn.prototype={
<span class='line'>398</span> constructor:fn, // need to adjust
<span class='line'>399</span> subfn:function(){
<span class='line'>400</span> var _f=arguments.callee; // function, flag
<span class='line'>401</span> // 當不用 new 時,以 _f.* 替代 fn.subfn.*this.* 替代 fn.*
<span class='line'>402</span> alert('fn.prototype.subfn: this.val='+this.val);
<span class='line'>403</span> alert('fn.prototype.subfn: _f.val='+_f.val);
<span class='line'>404</span> alert('fn.prototype.subfn: this.constructor.val='+this.constructor.val);
<span class='line'>405</span> },
<span class='line'>406</span> val:'test value: fn.prototype.val'
<span class='line'>407</span> }; // fn.prototype={
<span class='line'>408</span> fn.prototype.subfn.val='test value: fn.prototype.subfn.val';
<span class='line'>409</span> var inst=new fn;
<span class='line'>410</span> //inst.constructor.subfn();
<span class='line'>411</span> inst.subfn();
<span class='line'>412</span>
<span class='line'>413</span>
<span class='line'>414</span> var obj={
<span class='line'>415</span> val:34,
<span class='line'>416</span> fn:function(){
<span class='line'>417</span> var _f=arguments.callee; // function, flag
<span class='line'>418</span> // 以 _f.* 替代 obj.subfn.*this.* 替代 obj.*
<span class='line'>419</span> alert(this.val);
<span class='line'>420</span> }
<span class='line'>421</span> };
<span class='line'>422</span> ww.ee();
<span class='line'>423</span>
<span class='line'>424</span>
<span class='line'>425</span>
<span class='line'>426</span> to hack @ Firefox 3.0: https://bugzilla.mozilla.org/show_bug.cgi?id=442333
<span class='line'>427</span> 假設 scope obj.fn 裡有一個 foo 變數,在 Firefox 上可以使用 var a; eval('a = foo', obj.fn) 把 foo 變數抓到 a 裡面所以你如果有使用這種方法來放與安全性有關的東西就得重新檢查一次程式碼Module Pattern Provides No Privacy…at least not in JavaScript(TM)。在一陣討論後,這個功能打算在 Firefox 3.1 拿掉Remove eval's optional second argument。
<span class='line'>428</span>
<span class='line'>429</span> */</span><span class="WHIT">
<span class='line'>430</span>
<span class='line'>431</span>
<span class='line'>432</span> </span><span class="COMM">/*
<span class='line'>433</span> 實作class:
<span class='line'>434</span> http://www.remus.dti.ne.jp/~a-satomi/bunsyorou/ArekorePopup.html
<span class='line'>435</span> http://www.klstudio.com/post/32.html
<span class='line'>436</span> function classA(){
<span class='line'>437</span> // define property
<span class='line'>438</span> // array
<span class='line'>439</span> this.attrs=['title','href','cite','datetime'];
<span class='line'>440</span> // object
<span class='line'>441</span> this.ns={
<span class='line'>442</span> xhtml1:'http://www.w3.org/1999/xhtml',
<span class='line'>443</span> xhtml2:'http://www.w3.org/2002/06/xhtml2',
<span class='line'>444</span> };
<span class='line'>445</span> return this;
<span class='line'>446</span> }
<span class='line'>447</span> classA.prototype={
<span class='line'>448</span> // function
<span class='line'>449</span> launch:function(){},
<span class='line'>450</span> init:function(){},
<span class='line'>451</span> // object
<span class='line'>452</span> scanNode:{
<span class='line'>453</span> recursive:function(node){}
<span class='line'>454</span> },
<span class='line'>455</span> // http://dean.edwards.name/weblog/2005/10/add-event/
<span class='line'>456</span> addEvent:function(obj,type,listener){
<span class='line'>457</span> if (obj.addEventListener) // Std DOM Events
<span class='line'>458</span> obj.addEventListener(type, listener, false);
<span class='line'>459</span> else if (obj.attachEvent) // IE
<span class='line'>460</span> obj.attachEvent(
<span class='line'>461</span> 'on' + type,
<span class='line'>462</span> function() { listener( {
<span class='line'>463</span> type : window.event.type,
<span class='line'>464</span> target : window.event.srcElement,
<span class='line'>465</span> currentTarget : obj,
<span class='line'>466</span> clientX : window.event.clientX,
<span class='line'>467</span> clientY : window.event.clientY,
<span class='line'>468</span> pageY : document.body.scrollTop + window.event.clientY,
<span class='line'>469</span> keyCode : window.event?window.event.keyCode:e?e.which:0,
<span class='line'>470</span> shiftKey : window.event.shiftKey,
<span class='line'>471</span> stopPropagation : function() { window.event.cancelBubble=true; }
<span class='line'>472</span> } ) }
<span class='line'>473</span> );
<span class='line'>474</span> }
<span class='line'>475</span> };
<span class='line'>476</span> var A=new classA();
<span class='line'>477</span>
<span class='line'>478</span>
<span class='line'>479</span> */</span><span class="WHIT">
<span class='line'>480</span>
<span class='line'>481</span>
<span class='line'>482</span> </span></pre></body></html>