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

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

    • 分享

      你真的會(huì)寫(xiě)JavaScript嗎?

       Cogitate 2007-05-15

      你真的會(huì)寫(xiě)JavaScript嗎?

      By 小馬 on UI探討

       

      今天看到MSDN 上的新文章:Create Advanced Web Applications With Object-Oriented Techniques 。

      很久沒(méi)有看到這樣讓人唇齒留香的好文了。上次看到的是一篇是 Douglas Crockford 的JavaScript, We Hardly new Ya (我簡(jiǎn)單翻譯了一下,譯文在后)。

      同其他教你如何用面向?qū)ο蟮乃枷刖帉?xiě)JavaScript的其他文章一樣,該文也是著重在這么幾個(gè)要素:

      • JavaScript的對(duì)象就是一個(gè)關(guān)聯(lián)數(shù)組。
      • JavaScript 函數(shù)也是一個(gè)對(duì)象。
      • 原型(Prototype)
      • 閉包(Closures)
      • 繼承/私有屬性/靜態(tài)方法
      • 命名空間

      作者文筆很好,英文很容易看懂,沒(méi)有生僻的用詞(順便提一下,《PPK on JavaScript》作者的英文不敢恭維)。用來(lái)舉例的代碼也很貼切。

      特別是文章的開(kāi)頭很有意思,作者寫(xiě)到他和一個(gè)據(jù)說(shuō)已經(jīng)寫(xiě)了快4年JavaScript的女程序員聊天,女程序員認(rèn)為她的JS水平very good,后來(lái)作者發(fā)現(xiàn)她確實(shí)會(huì)寫(xiě),但僅僅是會(huì)寫(xiě),其實(shí)對(duì)JavaScript的內(nèi)涵所知甚少。

      作者想用這個(gè)例子說(shuō)明,有很多具備Java/C++/C#的開(kāi)發(fā)人員在編寫(xiě)JavaScript或者轉(zhuǎn)行到FED(比如我)的時(shí)候,想當(dāng)然的把那些標(biāo)準(zhǔn)面向?qū)ο笳Z(yǔ)言的思想套用在JavaScript上,反而走入迷途。

      對(duì)此我深有體會(huì),我正是在真正參與了一次Ajax的項(xiàng)目并真正讀懂了Prototype框架的源碼之后,對(duì)JavaScript有了完全全新的認(rèn)識(shí)。

      總之,推薦閱讀。附上JavaScript, We Hardly new Ya的譯文,譯得匆忙,定有行文不通之處,請(qǐng)客官見(jiàn)諒!


      原文: JavaScript, We Hardly new Ya  --Douglas Crockford。  

      JavaScript是一門基于原型的語(yǔ)言,但它卻擁有一個(gè) new 操作符使得其看起來(lái)象一門經(jīng)典的面對(duì)對(duì)象語(yǔ)言。那樣也迷惑了程序員們,導(dǎo)致一些有問(wèn)題的編程模式。

      其實(shí)你永遠(yuǎn)不需要在JavaScript使用 new Object()。用字面量的形式{}去取代吧。

      同理,不要使用 new Array() ,而代之以字面量[]。JavaScript中的數(shù)組并不象Java中的數(shù)組那樣工作的,使用類似Java的語(yǔ)法只會(huì)讓你糊涂。

      同理不用使用 new Number, new String, 或者 new Boolean。這些的用法只會(huì)產(chǎn)生無(wú)用的類型封裝對(duì)象。就直接使用簡(jiǎn)單的字面量吧。

      不要使用 new Function 去創(chuàng)建函數(shù)對(duì)象。用函數(shù)表達(dá)式更好。比如:

      frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”)

      更好的寫(xiě)法是:

      frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;};

      第二種形式讓腳本編譯器更快的看到函數(shù)主體,于是其中的語(yǔ)法錯(cuò)誤也會(huì)更快被檢測(cè)出來(lái)。有時(shí)候程序員使用 new Function 是因?yàn)樗麄儧](méi)有理解內(nèi)部函數(shù)是如何工作的。

      selObj.onchange = new Function(”dynamicOptionListObjects[”+
              dol.index+”].change(this)”);

      如果我們讓用字符串做函數(shù)體,編譯器不能看到它們。 如果我們用字符串表達(dá)式做函數(shù)體,我們同樣也看不到它們。更好的方式就是不要盲目編程。通過(guò)制造一個(gè)返回值為函數(shù)的函數(shù)調(diào)用,我們可以明確的按值傳遞我們 想要綁定的值。這允許我們?cè)谘h(huán)中初始化一系列 selObj 對(duì)象。

      selObj.onchange = function (i) {
          return function () {
              dynamicOptionListObjects[i].change(this);

          };
      }(dol.index);

      直接對(duì)一個(gè)函數(shù)使用new永遠(yuǎn)不是一個(gè)好主意。比如, new function 對(duì)構(gòu)造新對(duì)象沒(méi)有提供什么優(yōu)勢(shì)。

      myObj = new function () {
          this.type = ‘core’;
      };

      更好的方式是使用對(duì)象字面量,它更輕巧,更快捷。

      myObj = {
          type: ‘core’
      };

      假如我們需要?jiǎng)?chuàng)建的對(duì)象包含的方法需要訪問(wèn)私有變量或者函數(shù),更好的方式仍然是避免使用new.var foo = new function() {
          function processMessages(message) {
              alert(”Message: ” + message.content);
          }
          this.init = function() {
              subscribe(”/mytopic”, this, processMessages);
          }
      }

      通過(guò)使用 new 去調(diào)用函數(shù),對(duì)象會(huì)持有一個(gè)無(wú)意義的原型對(duì)象。這只會(huì)浪費(fèi)內(nèi)存而不會(huì)帶來(lái)任何好處。如果我們不使用new,我們就不用在對(duì)象鏈維護(hù)一個(gè)無(wú)用的prototype對(duì)象。所以我們可以用()來(lái)正確的調(diào)用工廠函數(shù)。

      var foo = function () {
          function processMessages(message) {
              alert(”Message: ” + message.content);
          }
          return {
              init: function () {
                  subscribe(”/mytopic”, this, processMessages);
              }
          };
      }();

      所以原則很簡(jiǎn)單: 唯一應(yīng)該要用到new操作符的地方就是調(diào)用一個(gè)古老的構(gòu)造器函數(shù)的時(shí)候。當(dāng)調(diào)用一個(gè)構(gòu)造器函數(shù)的時(shí)候,是強(qiáng)制要求使用new的。

      有時(shí)候可以來(lái)new一下, 有的時(shí)候還是不要了吧。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(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)論公約

        類似文章 更多