??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲图片123,欧美激情一二三,在线亚洲人成电影网站色wwwhttp://www.aygfsteel.com/xyy198203/category/19118.htmlDAY DAY UP , STUDY HARDzh-cnWed, 21 Mar 2007 01:03:47 GMTWed, 21 Mar 2007 01:03:47 GMT60Prototype学习(fn)之初始化和?/title><link>http://www.aygfsteel.com/xyy198203/articles/104934.html</link><dc:creator>没有鱼的?/dc:creator><author>没有鱼的?/author><pubDate>Tue, 20 Mar 2007 05:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/xyy198203/articles/104934.html</guid><wfw:comment>http://www.aygfsteel.com/xyy198203/comments/104934.html</wfw:comment><comments>http://www.aygfsteel.com/xyy198203/articles/104934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/xyy198203/comments/commentRss/104934.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/xyy198203/services/trackbacks/104934.html</trackback:ping><description><![CDATA[ <table width="100%"> <tbody> <tr> <td> <p> <font face="Arial">?prototype.js 深入学习(fn) javascript 的面向对象特?/font> </p> <p> <font face="Arial">1.怎样构?初始?对象?</font> </p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Prototype = {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  Version: '1.5.0_rc1',   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)',   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  emptyFunction: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {},   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  K: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(x) {</span> <span id="wmqeeuq" class="keyword" twffan="done">return</span> <span twffan="done"> x}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> </ol> </div> <p>pP初始化了一个对?名字叫 Prototype)Q以?qing)对象的四个成? Version, ScriptFragment, emptyFunction, K</p> <p>我们也来试试:</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> bbs = {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> name: 'JavaEye',   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> version: '2.0',   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> describe: </span> <span id="wmqeeuq" class="string" twffan="done">"做最的软g开发交区"</span> <span twffan="done">,   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() { alert(</span> <span id="wmqeeuq" class="string" twffan="done">"hello, i'm javaeye! "</span> <span twffan="done">) }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}  </span> </li> </ol> </div> <p>于是你可以这样用:(x) bbs.name ?bbs.sayHello()</p> <p>看到吗? sayHello 是一个方法哦Q不要惊慌,"一切都是对?Q所以它?name 是一L(fng)Q只不过初始化,或定义的语法不一栗想?js 中的正则表达式中的那两个杆杆了吗Q?可爱吧!</p> <p>Ҏ(gu)是对象,所以它可以被当作参C递,或者作为方法的q回倹{?/p> <p>所?Prototype 中有一?Version 属性,q有一个匹?script 的正则式字符Ԍ 一个空Ҏ(gu)emptyFunctionQ还有一个方?K, 它仅仅返回参数?/p> <p>没问题吧Ql!</p> <p>2. 构造函敎ͼ</p> <p>先让我们写段代码?中学Ӟ我语文极?大学没语文了)Q我惛_代码让你们明白我心里真实的想?Q?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Person = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(name) { </span> <span id="wmqeeuq" class="comment" twffan="done">// q里 Person 是一个方?</span> <span twffan="done">  </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name = name;   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> bencode = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> Persion(</span> <span id="wmqeeuq" class="string" twffan="done">"bencode"</span> <span twffan="done">);  </span> <span id="wmqeeuq" class="comment" twffan="done">// q里像Java吧! </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">alert(bencode.name);  </span> </li> </ol> </div> <p>先看l果Q?br />?alert(bencode.name); 可以知道Qbencode是对象, ?name 是 bencode 的属性, 它被正确地初始化?"bencode"</p> <p>所?var bencode = new Persion("bencode"); 是构造了一个新的对象,Person() 相当于构造函?/p> <p>所?new q个关键字, 是构造一个新的对象,q且在这个对象上调用相应的方法,q将q个对象q回?/p> <p>按上面说Q?Ҏ(gu) 如果用在 ?new 后面Q就相当于成了构造函C?/p> <p>话又说回来了Q?如果 var bencode = new Persion("bencode") ?构造了一个对象,像Java, 那么 Person 是不是类呢?<br />可是 Person 不是Ҏ(gu)吗? 可是Ҏ(gu)不也是对象吗Q?cM是对象? </p> <p>一切皆对象? </p> <p>本来无一物!</p> <p>好了Q看 prototype.js?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Class = {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  create: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">    </span> <span id="wmqeeuq" class="keyword" twffan="done">return</span> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">      </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.initialize.apply(</span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">, arguments);   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">    }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}  </span> </li> </ol> </div> <p>初始化一?Class 对象Q?它有一个成员,是一个方法, q个Ҏ(gu)q因另一个方法(Ҏ(gu)是对象,所以可以作为参数或者返回|</p> <p>所以如果我们这么做Q?<br /></p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> A = Class.create(); </span> <span id="wmqeeuq" class="comment" twffan="done">// 此时 A 是一个方法,Ҏ(gu)体,下面解释 </span> <span twffan="done">  </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> a = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> A(...);  </span> <span id="wmqeeuq" class="comment" twffan="done">// Ҏ(gu)法用 new 操作W,是构造一个新的对象,然后在这个对象上调用q个Ҏ(gu)( 现在是 A)</span> <span twffan="done">  </span> </li> </ol> </div> <p>上面分析_(d) A相当于类Q?哈哈 Class.create();  // l于名副其实<br />var a = new A(...);  // 也是相当地直观, 是构造一个新的对象,cd 是A</p> <p>new 操作W构造了对象Qƈ调用?Ҏ(gu)Q?q个Ҏ(gu)到底做了什么呢Q?也就是上面没有分析的东东Q看看先Q?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Class = {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  create: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">    </span> <span id="wmqeeuq" class="keyword" twffan="done">return</span> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {  </span> <span id="wmqeeuq" class="comment" twffan="done">// 见[1] </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">      </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.initialize.apply(</span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">, arguments);  </span> <span id="wmqeeuq" class="comment" twffan="done">// 见[2] </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">    }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  }    </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}  </span> </li> </ol> </div> <p>[1]. new 操作W,׃(x)在新产生的对象上调用q个Ҏ(gu)<br />[2]. 哦? q里是调用 this 对象上的 initializeҎ(gu)Q?q传?arguments<br />  换句话说Q就是把构造的d委托l?initialize Ҏ(gu)<br />  initialize? 哪里来? 见下面,cȝ扩展(l承)<br />  <br />3. prototype?</p> <p>看段老代码:(x)<br /></p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Person = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(name) {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name = name;   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> bencode = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> Person(</span> <span id="wmqeeuq" class="string" twffan="done">"bencode"</span> <span twffan="done">);  </span> </li> </ol> </div> <p>bencode不是一个自闭的人,他应该可以向javaeye介绍一下自己?br />像这P(x)<br /></p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span twffan="done">bencode.sayHello();   </span> </span> </li> </ol> </div> <p> <br /> <br />假如不能实现以上功能的话Q?上面?newQ上面所有的东东都等于垃圾?/p> <p>所以。需要给 Person cd"实例Ҏ(gu)"</p> <p>题外话:(x) 静态方法如何添加? 看上面的 Class.create, 仅仅是一个对象的成员而已</p> <p>好, 再来一D?(Z完整性,上面的几句话Q再抄一?</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Person = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(name) {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name = name;   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">Person.prototype = {  </span> <span id="wmqeeuq" class="comment" twffan="done">// protype 是啥? </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"hi, javaeye, I'm "</span> <span twffan="done"> + </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name);   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> bencode = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> Person(</span> <span id="wmqeeuq" class="string" twffan="done">"bencode"</span> <span twffan="done">);   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">bencode.sayHello();  </span> </li> </ol> </div> <p>q行代码Q通过Q?/p> <p>prototype是啥Q?h时忘?Prototype(prototype.js) q个库,名字一栯已Q?/p> <p>让我们再从结果上d析(W一ơ我们用q种Ҏ(gu)分析而得Z new 的作用)Q?/p> <p>我们在思考:(x)<br /> 要想 bencode.sayHello() 正常q行<br /> bencode 是一个对? q是我们已经知道?br /> sayHello() 应该?bencode q个对象的方法才可以<br /> <br /> 可是bencode q个对象?new 操作W生的, ?new 此时作用?Person q个 "c?<br /> 那么Q?哦? 那么有两U可?<br /> 1. new 产生的那个新对象是不是就?Person.prototype<br /> 2. Person.prototype 中的成员 会(x)?new 操作W添加到 C生的对象?</p> <p>再看:<br /></p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span twffan="done">Person.prototype = {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"hi, javaeye, I'm "</span> <span twffan="done"> + </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name); </span> <span id="wmqeeuq" class="comment" twffan="done">// q里有this </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}  </span> </li> </ol> </div> <p>this.name, q里?this 指什么?所以第一个可能讲不通呀</p> <p>回忆赯D:(x)</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Person = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(name) {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name = name;   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}  </span> </li> </ol> </div> <p>如果q里?this 代表着C生的对象的话?br />那么W二U情况就讲得通了Q?new 会(x)?Person.prototype q个对象的成员放?q个新对象中?与当前行为相W?/p> <p>所以:(x) Person ?prototype 对象中的 成员, 会(x)被添加到 C生的对象 ?我是q样理解?<br />(不知?Js解释器是不是开源的Q?有空我得ȝ看,怎么实现的?</p> <p>嘿,默认?prototype 是 Object 哦!</p> <p>4. 扩展Q承?</p> <p>什么是扩展Q啥是承? ! 我从爸爸那得C什么?<br />想不通!</p> <p>q是实际点:(x)</p> <p>有一个类A, 它有一?sayHelloҎ(gu)</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> A = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">A.prototype = {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"sayHello A"</span> <span twffan="done">)   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> </ol> </div> <p>我想构造一?B c,让他l承 A 对象Q?q句话太抽象?</p> <p>其实我们可能惌P(x)</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> b = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> B();   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">b.sayHello();  </span> <span id="wmqeeuq" class="comment" twffan="done">// 调用 A 的 sayHello</span> <span twffan="done">  </span> </li> </ol> </div> <p>q应该是l承的第一层含义(重用Q?/p> <p>怎么办到呢?</p> <p>var B = function() { // q里是有一个BcM<br />}</p> <p>怎么h?实例Ҏ(gu)"?  快点惌v prototype!!!</p> <p>B.prototype = A.prototype</p> <p>q样行了吗? 恭喜, q行通过Q?/p> <p>让我们整合一?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> A = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">A.prototype = {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"sayHello A"</span> <span twffan="done">);   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> B = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">B.prototype = A.prototype;   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> b = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> B();   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">b.sayHello();    </span> </li> </ol> </div> <p>可是如果 B 是这样呢?</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> B = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">B.prototype = {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> sayHi: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"sayHi B"</span> <span twffan="done">);   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}  </span> </li> </ol> </div> <p>我们是不是应该将 A.prototype 中的内容d?B.prototype 对象中,而不是代替它呢? 当然?/p> <p>q样才能"扩展"</p> <p>题外话?多态在哪里Q?嘿嘿</p> <p>好了Q够多了, 那prototype.js 是怎么?扩展"的呢Q?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span twffan="done">Object.extend = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(destination, source) {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  </span> <span id="wmqeeuq" class="keyword" twffan="done">for</span> <span twffan="done"> (</span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> property </span> <span id="wmqeeuq" class="keyword" twffan="done">in</span> <span twffan="done"> source) {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">    destination[property] = source[property];   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  </span> <span id="wmqeeuq" class="keyword" twffan="done">return</span> <span twffan="done"> destination;   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}  </span> </li> </ol> </div> <p>q个只是单地?source 的成员, d?destination 对象中嘛, 哪里看得出扩展?</p> <p>如果我这样呢Q?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> A = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">A.prototype = {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> sayHello: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"sayHello A"</span> <span twffan="done">)   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> B = </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">}   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">Object.extend(B.prototype, A.prototype); </span> <span id="wmqeeuq" class="comment" twffan="done">// 先添加父c?A)成员 </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">Object.extend(B.prototype, { </span> <span id="wmqeeuq" class="comment" twffan="done">// 再添加BcL? 如果是同名,则覆盖,行ؓ(f)W合 "多? </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> sayHi: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">  alert(</span> <span id="wmqeeuq" class="string" twffan="done">"sayHi B"</span> <span twffan="done">);   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">});   </span> </li> </ol> </div> <p>回忆刚才?Class.create()Q?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> Person = Class.create();   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> bencode = </span> <span id="wmqeeuq" class="keyword" twffan="done">new</span> <span twffan="done"> Person(</span> <span id="wmqeeuq" class="string" twffan="done">"bencode"</span> <span twffan="done">);  </span> </li> </ol> </div> <p>刚才说过Q?调用 new Ӟ 会(x)创徏一个新对象Qƈ且调?Person Ҏ(gu)Q?Person Ҏ(gu)?x)委托?"C生对??initializeҎ(gu)</p> <p>怎么L(fng)C生对象添?initialize Ҏ(gu)Q?哈哈Q轻?/p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span twffan="done">Object.extend(Person.prototype, {   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> initialize: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">() {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">  </span> <span id="wmqeeuq" class="keyword" twffan="done">this</span> <span twffan="done">.name = name;   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> } </span> <span id="wmqeeuq" class="comment" twffan="done">//, </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="comment" twffan="done">// 下面可以d其他实例Ҏ(gu)?</span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">});  </span> </li> </ol> </div> <p> <br />所以, 我们使用 prototype 创徏cM般格式是q样的:(x)</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> ClassName = Class.create();   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">Object.extend(ClassName.prototype, {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> initialize: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(...) { </span> <span id="wmqeeuq" class="comment" twffan="done">// q就相当于构造函?</span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> </span> <span id="wmqeeuq" class="comment" twffan="done">//... </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">});  </span> </li> </ol> </div> <p>如果我们要承一个类Q只要:(x)</p> <div id="wmqeeuq" class="code_title" twffan="done">js 代码</div> <div id="wmqeeuq" class="dp-highlighter" twffan="done"> <div id="wmqeeuq" class="bar" twffan="done"> </div> <ol class="dp-c"> <li id="wmqeeuq" class="alt"> <span twffan="done"> <span id="wmqeeuq" class="keyword" twffan="done">var</span> <span twffan="done"> ClassName = Class.create();   </span> </span> </li> <li id="wmqeeuq" class=""> <span twffan="done">Object.extend(ClassName.prototype, SuperClassName.prototype);   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">Object.extend(ClassName.prototype, {   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> initialize: </span> <span id="wmqeeuq" class="keyword" twffan="done">function</span> <span twffan="done">(...) {   </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done"> }   </span> </li> <li id="wmqeeuq" class=""> <span twffan="done"> </span> <span id="wmqeeuq" class="comment" twffan="done">//... </span> <span twffan="done">  </span> </li> <li id="wmqeeuq" class="alt"> <span twffan="done">});  </span> </li> </ol> </div> <p>面向对象部分基本上就q样?/p> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/xyy198203/aggbug/104934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/xyy198203/" target="_blank">没有鱼的?/a> 2007-03-20 13:20 <a href="http://www.aygfsteel.com/xyy198203/articles/104934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˻</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨμ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">⴨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͭɽ</a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">غ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ൺ</a>| <a href="http://" target="_blank">Ӫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>