Microsoft Ajax Library 對javascript原生類型的擴充

來源:互聯網
上載者:User

什麼是Microsoft Ajax Library?
    ·asp.net ajax 的用戶端部分
    ·純用戶端架構(獨立於伺服器端的)
    ·提供了js擴充和基礎類庫

Javascript中常用的原生類型:
    ·Object
    ·Arrary
    ·Error
    ·Function
    ·。。。。。

Object原生類型
    ·一個無序的集合,可以存放任意的類型對象
    ·常作為字典使用,取值賦值使用 obj["itemname"] 或者 obj.itemname 其中key是字串類型 value是任意類型
     並且可以用for-in遍曆字典中的每個項
    ·禁止擴充object的prototype對象,因為如果擴充了object的prototype對象,其擴充將會出現在所有的對象中,影
     響for操作結果(Microsoft Ajax Library沒有擴充object)
    
    【code demo】:
     var obj = new Object();   
     obj["name"] = "dongde";
     obj.salary = 10000;
     alert( obj["name"]+"的工資:"+obj.salary );
    
    【code demo】:
     var dict = new Object();
     for (var i = 0; i < 10; i++)
     {
         var key = "key_" + i;
         dict[key] = Math.random();
     }
  
     delete dict["key_8"];
  
     for (var key in dict)
     {
         alert("Key: " + key + ", Value + " + dict[key]);
     }
    
 

Array原生類型
     ·長度可變的數組對象,最大長度2^32-1
     ·建立Arrary
               new Array();  
               new Array(3);    
               new Array(9,"dongde");
      ·常用方法:
                concat  返回一個新數組,儲存了原數組所有的元素和所有的參數
                push 在數組尾添加一個或多個元素
                pop   從數組尾去除並返回元素
                shift  從數組頭去除並返回元素
                unshift   在數組頭添加一個或者多個元素
                join(sepatator)   返回以sepatator為分隔字元的連結所有元素的字串
                reverse   逆轉數組
                sort(compareFunction)  比較兩個元素, 可用於數字和字串元素的排序 ,其他類型需要提供compareFunction參數
                slice(start,end)返回新的數組,包括從下標start到end ,如果沒有end表示返回從start到結尾的所有元素的一個新
                                           數組, 如果start在end前或相同將返回空數組, 如果end參數為負數表示倒數第幾個下標結束

                splice    splice(2,1)  刪除元素(從下標為2開始刪除一個元素)
                           splice(2.0,"aaa","bbb") 插入元素 (從下標2插入)
                           splice(2,1,"aaa","bbb") 替換元素 

        ·Array原生類型的擴充
                 Array.enqueue(array,item);  入隊列,將item添加至array尾
                 Array.dequeue(array);         出隊列,刪除並返回array的第一個元素
                 Array.addRange(array,items);  將items數組中的左右元素添加至array尾
                 Array.contains(array,item);   是否存在某個元素,存在返回true,否側返回false
                 Array.clear(array); 清除array中的所有元素
                 Array.insert(array,index,item);  
                 Array.remove(array,item); 移除item元素
                 Array.removeAt(array,index);
                 Array.clone(array);  返回一個和array相同的新數組
                 Array.parse(value);
                 Array.indexOf(array,item,start);  從start開始尋找item元素,返回item的下標,如果沒有item元素返回-1
                 Array.add(array,item);  和 Array.enqueue(array,item)效果一樣
                 Array.forEach(array,method,instance);

Error原生類型
        ·表示錯誤對象

 

Function原生類型
       

·每個方法均為Function類型的執行個體
          typeof(Array) = typeof(Function) = "function"
        ·方法調用時根據發起的對象來確定this上下文
        ·Function.call(instance,[arg1[,arg2[,...]]]) 和 Function.apply(instance,args)
    每個Function都有兩個方法call和apply ,instance作為方法調用時this的上下文引用
    apply方法中的 args表示當調用時 args中的所有的元素依次傳入
    call方法中的 [arg1[,arg2[,...]]] 傳入的對象依次寫出就可以了

          【code demo】:
          
          function Show(content)
          {
   
             document.getElementById("divid").innerHTML += (content + "<br />");
          }

           function testMethod()
           {
              var result = this.toString();
              for( var i=0;i < arguments.length;i++ )
              {
                    result += (", " + arguments[i]);
      
              }
              return result;
           }

           var Mary = new String("My name is Mary");
           var Lin = new String("My name is Lin");
           Mary.testMethod = testMethod;
           Lin.testMethod = testMethod;

           show(testMethod());     //輸出[object]
           show(Mary.testMethod());   //輸出 My name is Mary  this指標指向Mary
           show(Lin.testMethod());    //輸出 My name is Lin  this指標指向Lin

           show("Mary.aMethod.call(b, 1, 2, 3): " + Mary.aMethod.call(Lin, 1, 2, 3));  //輸出 My name is Lin,1,2,3   this指標指向Lin
           show("Lin.aMethod.apply(a, [1, 2, 3]): " + Lin.aMethod.apply(Mary, [1, 2, 3]));  //輸出 My name is Mary,1,2,3  this指標指向Mary

           var CC = new String("My name is CC");
           show("Mary.aMethod.call(CC, 1, 2, 3): " + Mary.aMethod.call(CC, 1, 2, 3));  //輸出 My name is CC,1,2,3   this指標指向CC

        
         ·Function原生類型擴充

                 Function.createDelegate(instance,method); 得到一個方法的引用,執行他側會調用method方法,而且method的上下文this指向instance

                 Function.createCallback (method,context);   得到一個方法引用,執行他側會調用method方法,並將context作為額外參數傳入

               【code demo】:

                <asp:ScriptManager ID="ScriptManager1" runat="server" />
                <input type="button" value="Click Me" id="btn" />

                <script language="javascript" type="text/javascript">
      
                  var oo = {
             
                        textContext : "dongde",
                        onClick : function(e)
                        {
                               alert("你好:"+this.textContext);
                        }     
      
                       }
                   oo.onClick();

                 </script>

                //輸出   你好:dongde

 

                 <asp:ScriptManager ID="ScriptManager1" runat="server" />
                 <input type="button" value="Click Me" id="btn" />

                 <script language="javascript" type="text/javascript">
      
                 var oo = {
             
                       textContext : "dongde",
                       onClick : function(e)
                       {
                            alert("你好:"+this.textContext);
                       }      
       
                      }

                 $addHandler($get("btn"), "click", oo.onClick);   //Microsoft Ajax Library擴充方法,跨瀏覽器添加dom元素的事件

                 </script>

                 // 輸出undefined

 

     <asp:ScriptManager ID="ScriptManager1" runat="server" />
     <input type="button" value="Click Me" id="btn" />

     <script language="javascript" type="text/javascript">
      
       var oo = {
             
       textContext : "dongde",
       onClick : function(e)
       {
          alert("你好:"+this.textContext);
       }     
      
       }

              // $addHandler($get("btn"), "click", oo.onClick);   //Microsoft Ajax Library擴充方法,跨瀏覽器添加dom元素的事件

       var onClickDelegate = Function.createDelegate(oo, oo.onClick);
    
              $addHandler($get("btn"), "click", onClickDelegate);

     </script>

             //輸出   你好:dongde

 

            <asp:ScriptManager ID="ScriptManager1" runat="server" />
     <input type="button" value="Click Me" id="btn" />

     <script language="javascript" type="text/javascript">
      
       var oo = {
             
       textContext : "dongde",
       onClick : function(e,arg)
       {
          alert("你好:"+this.textContext+" "+ arg);
       }     
      
       }

              // $addHandler($get("btn"), "click", oo.onClick);   //Microsoft Ajax Library擴充方法,跨瀏覽器添加dom元素的事件

       // var onClickDelegate = Function.createDelegate(oo, oo.onClick);

       var onClickDelegate = Function.createCallback(
    Function.createDelegate(oo, oo.onClick), "wish you success");
    
              $addHandler($get("btn"), "click", onClickDelegate);

     </script>

     //輸出   你好:dongde wish you success
        


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.