J2EE社區(qū)

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

          Javascript設(shè)計(jì)模式學(xué)習(xí)系列 一

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

          首先簡單地為優(yōu)雅的Javascript代碼開個(gè)頭
          1.隨意的Javascript,有表現(xiàn)力的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函數(shù)和apply方法的第一個(gè)參數(shù)都是要傳入給當(dāng)前對象的對象,及函數(shù)內(nèi)部的this。后面的參數(shù)都是傳遞給當(dāng)前對象的參數(shù)。
          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的每個(gè)參數(shù)的意義有所了解了。

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

          同時(shí)使用apply的好處是可以直接將當(dāng)前函數(shù)的arguments對象作為apply的第二個(gè)參數(shù)傳入
          */


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

                  Javascript對象類型的不定性、可變性,即建造的類可以動態(tài)改變,即使已經(jīng)聲明的對象也能隨改變的類而改變,如下:
          /* 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());
          }
          與類的不定性相關(guān)的是,Javascript語言的另一特點(diǎn),反射機(jī)制,即可以在運(yùn)行時(shí)檢測類所具有的屬性和方法。

          運(yùn)用設(shè)計(jì)模式的三大原因:
          可維護(hù)性
          溝通交流性
          性能追求
          不使用設(shè)計(jì)模式的兩大原因:
          復(fù)雜性
          性能追求



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
          mail: 聯(lián)系我


          Feedback

          # re: Javascript設(shè)計(jì)模式學(xué)習(xí)系列 一  回復(fù)  更多評論   

          2009-05-30 18:11 by famingyuan
          哥們兒,只能說你是個(gè)強(qiáng)人!佩服!
          主站蜘蛛池模板: 阳朔县| 蓝田县| 建瓯市| 常德市| 仁布县| 海林市| 清镇市| 军事| 怀远县| 邛崃市| 耿马| 晋江市| 林州市| 英山县| 新宁县| 久治县| 达孜县| 若羌县| 柳州市| 乐安县| 宜兴市| 玉门市| 会同县| 永安市| 澎湖县| 佛冈县| 开鲁县| 合江县| 康保县| 浏阳市| 金平| 谷城县| 浪卡子县| 清水河县| 来宾市| 靖州| 班玛县| 峨山| 左云县| 台东县| 邯郸县|