乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      博客園 - 鳥食軒 - JScript中的prototype(原型)屬性研究(2)

       weicat 2006-03-23
      JScript中的prototype(原型)屬性研究(2)
          上次的文章中我羅列了一下prototype屬性在JScript中的各種用法,但是prototype這個(gè)東西卻不是JScript創(chuàng)造出來的,JScript實(shí)際上是使用了我們?cè)O(shè)計(jì)模式中prototype pattern的一種衍生形式。下面我先簡(jiǎn)單的說一下prototype pattern,然后再來看到底JScript中的prototype是怎么回事?!

          What‘s prototype pattern?

          Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.

          用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。

          原型模式允許一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象,根本無需知道任何如何創(chuàng)建的細(xì)節(jié),工作原理是:通過將一個(gè)原型對(duì)象傳給那個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象,這個(gè)要發(fā)動(dòng)創(chuàng)建的對(duì)象通過請(qǐng)求原型對(duì)象拷貝它們自己來實(shí)施創(chuàng)建。

          繼續(xù)了解到底什么是prototype pattern,可以參看‘設(shè)計(jì)模式之Prototype(原型)‘這篇文章,即使不懂Java也沒有關(guān)系,把它的代碼都當(dāng)C#看就行了。

          搞清楚什么是原型了吧?反正記著一點(diǎn),prototype pattern是的實(shí)現(xiàn)是依賴于clone這個(gè)操作的,當(dāng)然要shallow copy還是deep copy的clone看自己的需要了。

          下面我們繼續(xù)說JScript里的prototype,為什么我們說它和prototype pattern里的prototype不一樣呢?! 這個(gè)不是我說就說出來的,也不是我吹出來的,看看這個(gè)示例,你就能大概糊涂: 
      <script language="javascript">
      function RP()
      {
          RP.PropertyA 
      = 1;
          RP.MethodA 
      = function()
          
      {
               alert(
      "RP.MethodA ");
          }
      ;
          
          
      this.PropertyA = 100
          
      this.MethodA = function()
          
      {
               alert(
      "this.MethodA");
          }
      ;
      }


      RP.prototype.PropertyA 
      = 10
      RP.prototype.MethodA 
      = function()
      {
          alert(
      "RP.prototype.MethodA");
      }
      ;
      </script>

          不要著急,還沒有開始做示例,只是給出了我們用來演示的一個(gè)類。RP是什么?rpwt嗎?當(dāng)然不是了,RP是ResearchPrototype了。好了不廢話了,看示例及結(jié)果分析。   
      <script language="javascript">
      rp 
      = new RP();
      alert(RP.PropertyA);
      RP.MethodA();
      alert(rp.PropertyA);
      rp.MethodA();
      </script>

          運(yùn)行結(jié)果閃亮登場(chǎng):
         1
         RP.MethodA
         100
         this.MethodA

          這個(gè)%$@#^$%&^...,不要著急,繼續(xù)看哦!

      <script language="javascript">
      rp 
      = new RP();
      delete RP.PropertyA;
      alert(RP.PropertyA);
      delete RP.MethodA;
      RP.MethodA();
      delete rp.PropertyA;
      alert(rp.PropertyA);
      delete rp.MethodA;
      rp.MethodA();
      </script>

          運(yùn)行結(jié)果再次登場(chǎng):
         undefined
         A Runtime Error has occurred.
         Do you wish to Debug?
         Line: 32
         Error: Object doesn‘t support this property or method
         10
         RP.prototype.MethodA


          好玩吧,看出來什么名堂了嗎?這里的RP.PropertyA和RP.MethodA只是用來做參照的,可是怎么把this.PropertyA和this.MethodA都delete了,還能出來結(jié)果,而且還是prototype導(dǎo)入的屬性和方法呢?

          這就是JScript的prototype和prototype pattern中prototype最大的不同了,JScript中的這個(gè)所謂的prototype屬性其實(shí)是個(gè)語言本身支持的特性,這里沒有發(fā)生任何的copy,不管shallow還是deep的。對(duì)于JScript的解釋引擎,它在處理"."或"[keyName]"引用的對(duì)象的屬性和方法時(shí),先在對(duì)象本身的實(shí)例(this)中查找,如果找到就返回或執(zhí)行。如果沒有查找到,就查找對(duì)象的prototype(this.constructor.prototype)里是否定義了被查找的對(duì)象和方法,如果找到就返回或執(zhí)行,如果沒有查找到,就返回undefined(對(duì)于屬性)或runtime error(對(duì)于方法)。

          正因?yàn)閜rototype導(dǎo)入類實(shí)例的屬性或方法是動(dòng)態(tài)查找的,所以我們才能對(duì)系統(tǒng)內(nèi)部對(duì)象添加prototype屬性和方法,比如給String對(duì)象添加trim方法:

      <script lanuage="javascript">
      String.prototype.trim()
      {
          
      return this.replace(/(^\s+)|(\s+$)/g, "");
      }
      </scritp>

          顯然JScript中的這種用法也是prototype pattern中的prototype不能解釋和支持的。

          這下對(duì)于JScript OOP中原型繼承法的理解因該沒有任何的障礙了吧?同時(shí)也應(yīng)該明白為什么原型繼承法有那么大的天生缺陷了吧?當(dāng)然如果有任何問題,歡迎繼續(xù)討論。

          附演示示例源代碼:

      <html>
      <head>
          <meta name="author" content="birdshome@博客園">
          
      <title>JScript Prototype Research</title>
      </head>
      <body>
      <script language="javascript"></script>
      <script language="javascript"></script>
      </body>
      </html>


          The End.

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多