J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          Javascript設計模式學習系列 一

          Posted on 2009-05-16 22:27 xcp 閱讀(273) 評論(1)  編輯  收藏 所屬分類: Javascript
          首先介紹一個網站,我很多書本都是在上面下載的,很好。http://www.freebookspot.in/
          我現在學習的書本是:Pro Javascript Design Pattern

          首先簡單地為優雅的Javascript代碼開個頭
          1.隨意的Javascript,有表現力的Javascript
          常用Javascript代碼:
           1var isIE = (document.all) ? true : false;
           2
           3var $ = function (id) {
           4    return "string" == typeof id ? document.getElementById(id) : id;
           5}
          ;
           6
           7var Class = {
           8  create: function() {
           9    return function() {
          10      this.initialize.apply(this, arguments);
          11    }

          12  }

          13}

          14
          15var Extend = function(destination, source) {
          16    for (var property in source) {
          17        destination[property] = source[property];
          18    }

          19}

          20
          21var Bind = function(object, fun) {
          22    return function() {
          23        return fun.apply(object, arguments);
          24    }

          25}

          26
          27var Each = function(list, fun){
          28    for (var i = 0, len = list.length; i < len; i++{ fun(list[i], i); }
          29}
          ;

          我喜歡的定義類的方法:
          var MyClass = Class.create();

          MyClass.prototype 
          =
          {
              
          //construction function
              initialize : function(para1, para2)
              
          {
                  
          this.property1 = para1;
                  
          this.property2 = para2;
                  
              }
          ,
              
          //public  function
              fun1 : function()
              
          {
              }
          ,
              
              
          //private function
              fun2 : function()
              
          {
              }

          }
          ;

          //call 和 apply的意義與用法

          //<input type="text" id="myText"   value="input text">
          function Obj(){this.value="對象!";}
          var value="global 變量";
          function Fun1(){alert(this.value);}

          window.Fun1();                                   
          //global 變量
          Fun1.call(window);                              //global 變量
          Fun1.call(document.getElementById('myText'));      //input text
          Fun1.call(new Obj());                           //對象!

          //call函數和apply方法的第一個參數都是要傳入給當前對象的對象,及函數內部的this。后面的參數都是傳遞給當前對象的參數。
          var func=new function(){this.a="func"}
           
          var myfunc=function(x){
               
          var a="myfunc";
               alert(
          this.a);
               alert(x);
           }

           myfunc.call(func,
          "var");
           
          /*可見分別彈出了func和var。到這里就對call的每個參數的意義有所了解了。

          對于apply和call兩者在作用上是相同的,但兩者在參數上有區別的。
          對于第一個參數意義都一樣,但對第二個參數:
          apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。
          如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1,[var1,var2,var3])

          同時使用apply的好處是可以直接將當前函數的arguments對象作為apply的第二個參數傳入
          */


                  隨意、寬松的表現1:Javascript的弱類型:null, undefined, boolean, number, String, Object, 特別的對象Array
                  隨意、寬松的表現2:匿名函數
          //匿名函數的調用方法
          (function(para1,para2)
          {
              
          return para1 + para2;
          }
          )(1,3);

                  Javascript對象類型的不定性、可變性,即建造的類可以動態改變,即使已經聲明的對象也能隨改變的類而改變,如下:
          /* Class Person. */
          function Person(name, age) {
          this.name = name;
          this.age = age;
          }

          Person.prototype 
          = {
          getName: 
          function() {
          return this.name;
          }
          ,
          getAge: 
          function() {
          return this.age;
          }

          }

          /* Instantiate the class. */
          var alice = new Person('Alice', 93);
          var bill = new Person('Bill', 30);

          /* Modify the class. */
          Person.prototype.getGreeting 
          = function() {
          return 'Hi ' + this.getName() + '!';
          }
          ;

          /* Modify a specific instance. */
          alice.displayGreeting 
          = function() {
          alert(
          this.getGreeting());
          }
          與類的不定性相關的是,Javascript語言的另一特點,反射機制,即可以在運行時檢測類所具有的屬性和方法。

          運用設計模式的三大原因:
          可維護性
          溝通交流性
          性能追求
          不使用設計模式的兩大原因:
          復雜性
          性能追求



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
          mail: 聯系我


          Feedback

          # re: Javascript設計模式學習系列 一  回復  更多評論   

          2009-05-30 18:11 by famingyuan
          哥們兒,只能說你是個強人!佩服!
          主站蜘蛛池模板: 土默特左旗| 漾濞| 镇雄县| 兴安盟| 华亭县| 米脂县| 长宁区| 博乐市| 鹤岗市| 江北区| 广平县| 太原市| 上虞市| 宜宾县| 太白县| 长武县| 嵩明县| 榆中县| 河北区| 高阳县| 苍南县| 蛟河市| 阿鲁科尔沁旗| 江永县| 揭西县| 镇康县| 邛崃市| 成都市| 界首市| 博湖县| 偃师市| 天祝| 惠东县| 磐石市| 云安县| 尼勒克县| 青川县| 阳高县| 长春市| 万载县| 米林县|