qqjianyue代碼工

          砌java代碼
          posts - 62, comments - 9, trackbacks - 0, articles - 10
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Javascript設計模式學習系列 一

          Posted on 2009-05-16 10:36 Qzi 閱讀(1825) 評論(2)  編輯  收藏 所屬分類: 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語言的另一特點,反射機制,即可以在運行時檢測類所具有的屬性和方法。

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


          評論

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

          2009-05-16 13:41 by Ci
          不錯。。。

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

          2009-05-16 19:13 by aisdf
          現在滸的是非注入的。。像Jquery方式的
          主站蜘蛛池模板: 拉孜县| 漳浦县| 大邑县| 嘉义县| 双桥区| 桂阳县| 土默特右旗| 特克斯县| 和平县| 棋牌| 托克托县| 和平区| 手游| 婺源县| 定远县| 庄河市| 萝北县| 通州区| 山阳县| 龙陵县| 莱州市| 巩义市| 绍兴市| 观塘区| 新竹市| 吴川市| 高邑县| 黑水县| 旌德县| 延安市| 东山县| 渝中区| 嘉荫县| 威远县| 九台市| 屏南县| 洞口县| 都兰县| 图木舒克市| 新余市| 邵武市|