征服 ajax, javascript 物件導向思想設計

來源:互聯網
上載者:User
Javascript 物件導向的程式設計

一:用定義函數的方式定義類
function class1(){
    類成員的定義及建構函式
}
這裡的class1 既是一個函數也是一個類。作為函數,它可以理解為類的建構函式,負責初始化的工作。

二:使用new 操作符獲得一個類的執行個體
new Date() 表示建立一個日期對象,而Date 就是表示日期的類,只是這個類是由javascript 內部提供的,
不是使用者定義的。
new 操作符不僅對內部類有效,對使用者定義的類也是同樣的用法,對於自訂的class1
也可以用 new 來擷取一個執行個體:
 var obj1=new class1();
拋開類的概念,class1 就是一個函數,那麼是不是所有的函數都可以用new 來操作呢 ?答案是肯定的,
在javascript 中,函數和類就是一個概念,當new 一個函數時,就回返回一個對象。如果這個函數中沒有
初始化類成員,就會返回一個空的對象。
事實上,new 一個函數的時候,這個函數就是所代表類的建構函式,其中所有的代碼都可以看作是為了初始化
一個對象而工作。

三:使用方括弧[] 引用對象的屬性和方法
在 javascript 中,【每個對象可以看作是多個屬性(方法)的結合】,引用一個屬性方法很簡單,即
對象名. 屬性(方法)名
除此之外還可以用方括弧的形式來引用:
對象名["屬性(方法)名"],這裡的方法名和屬性名稱是一個字串,而非先點號後面的表示符
var arr=new Array();
         arr[0]="3333333";
         arr[2]="4444444";
         alert(arr.length);             3
         alert(arr["length"]);          3
        
         arr.push("ddddd");
         arr["push"]("eeeee");
         alert(arr.length);             5

訪問類的方法: 類名["屬性名稱"]  或者  類名. 屬性名稱
 function User()
     {
        this.age=21;
        this.name="軍";
     }
     function vad(o)
     {
        var user=new User();
        if(o.selectedIndex!=0)
        {
           alert(user[o.value]);
        }
     }
四.動態添加修改刪除屬性和方法
首先使用Object來建立一個Null 物件user; var user=new Object();
1.添加屬性 user.name="dddddddd";
2.添加方法 user.alert=function(){alert("dddddd")};
3.修改屬性
用新的屬性替換舊的屬性。
4,刪除屬性
刪除屬性的過程也很簡單,就是將其設定為
undefined;
5.刪除方法
 同樣設定為 undefined
使用這種方法還有一個 額外的特點,就是可以使用非標識符字串作為屬性名稱,例如標識符中不允許
已數字開頭或者出現空格,但是在方括弧([])文法中卻可以使用;

六:使用大括弧{}文法建立無類型對象
 javascript 中的對象其實就是屬性(方法)的結合,並沒有嚴格意義上類 的概念 ,所以他提供了另外一種
簡單的方式來建立對象。
  var  u={
        
            name:'jasc',
            age:'21',
            hello: function(){alert('ddddddddeee');},

            sex:'難',
            "001":"ggggg"          ------無類型對象
         };       
        
         alert(u.age);
         u.hello();
         alert(u.sex);        
         alert(u["001"]);

七:prototype  原型對象
 每個函數對象都具有一個子物件 prototype,prototype 表示了函數的原型,而函數也既是類,prototype
實際上就表示了一個類的集合。 當通過 new 來擷取一個類的對象時,prototype 對象成員都會成為執行個體化
對象的成員。

 class1.prototype.method=function(){alert("dddddddddd");};    

         
          var cls=new class1();
          cls.method();

深入認識 javascript 中的函數
 函數作為一個對象,他本身就可以具有一些方法和屬性,而為函數添加屬性和方法就必須藉助於function 這個
類型

 var i=function(a,b){alert(a);};
           
            i(5);
函數對象和其他類部對象之間的關係。

====================================================================================
使用物件導向思想處理 cookie
1. 建立Cookie對象
因為是作為類名或者命名空間的作用,所以和Math對象類似,這裡使用Cookie來表示該對象。
var Cookie=new Object();
2.實現設定Cookie的方法,其中name是要設定cookie的名稱;value是設定cookie的值,option包括了其他
選項,是一個對象作為參數。
/*使用物件導向的思想處理Cookie*/
           
            /*如果 Cookie已存在,添加此Cookie,就相當於修改此Cookie*/
           
            var  Cookie=new Object();
            Cookie.setCookie=function(name,value,option)
            {
                 //用於儲存賦值給Document.cookie 的字串
                 var str=name+"="+escape(value);
                 if(option)
                 {
                    //如果設定了到期時間
                    if(option.expireDays)
                    {
                        var date=new Date();
                        var ms=option.expireDays*24*60*60*1000;
                        date.setTime(date.getTime()+ms);
                        str+=";expires="+date.toGMTString();
                       
                    }
                    if(option.path)
                       str+=";path="+path;
                    if(option.domain)
                       str+=";doman="+domain;
                    if(option.secure)
                       str+=";true";
                 }
                 document.cookie=str;
            }
            Cookie.getCookie=function(name)
            {
                var cookieArray=document.cookie.split(";");
                for(var i=0;j=cookieArray.length;i<j;i++)
                {
                    var arr=cookieArray[i].split("=");
                    if(arr[0]==name)
                      return unescape(arr[1]);
                }
                return  "";
            } 
            Cookie.deleteCookie=function(name)
            {
                 this.setCookie(name,"",{expireDays:-1});
            }
            var Cookie={
              setCookie=function(){},
              getCookie=function(){},
              deleteCookie=function(){}
            };       
           
           
       }
====================================================================================
JavaScript 進階編程
 架構編程 . cookie 技術 .Regex .window 對象 .異常處理

一:架構編程包括架構的自我控制以及架構之間的互相訪問,例如從架構中引用另外一個架構中的
JavaScript 變數,調用其他架構內的函數,控制另外一個架構的表單行為等。

一個頁面中的所有架構以集合形式作為Windows對象的屬性提供;
例如;window.frames表示的就是頁面內所有的架構的結合,這和表單對象,連結化物件,圖片對象等是
類似的,不同的是,這些集合是document的屬性。

要引用一個架構,可以使用如下文法:
window.frames["frameName"]
window.frames.framesName
window.frames[index]

其中 ,windows字樣也可以用 self 代替或省略,假設 frameName為頁面中的第一個架構,則以下寫法
是等價的:
self.frames["frameName"]
self.frames[0]
frames[0]
frameName

所謂對架構的引用也就是對window對象的引用,例如使用 window.document 對象象頁面寫入資料,使用
window.locaiton屬性來改變架構內的頁面等。

1,從父架構到子架構的引用
 window.frames["frameName"] 引用頁面內為 frameName 的子架構
 如果要引用頁面內子架構的子架構,window.frames["frameName1"].frames["frameName2"]

2. 子架構到父架構的引用
每一個window對象都有一個 parement屬性,表示他的父架構,如果該架構已經是頂層架構,
則 window.parent 還表示架構本身。

3.兄弟架構間的引用
 如果兩個架構同為一個架構的子架構,可以通過父架構來間接引用。
 self.parent.frames["frame2"]

4.不同層此架構之間的互相引用
  通過 1 和 3 的方法可以實現

5.對頂層架構的引用
 和parent 屬性類似,window對象還有一個top屬性 他表示對頂層架構的引用,這可以用來判斷一個
架構自身是否為頂層架構。
 if(self==top){}

對架構的引用就是對window對象的引用,利用windows對象location屬性,可以改變架構的導航
 window.frames[0].location=1.html

引用其他架構內的javascript 變數和函數

js 全屏
<script   language="javascript">   
              if   (this.name!='FullWnd')   
                      {                           
                                  window.open(location.href,'FullWnd','fullscreen,scrollbars=no');     
                                  this.parent.opener=null;   
                                  this.parent.close();   
                   } 
  </script>

Regex
使用 RegExp 對象執行字串匹配
RegExp 是 JavaScript 中的Regex對象,利用它可以完成
字串匹配的各種操作。。 
 var objRegExp=/pattern*/[flag];
 var objRegExp=new RegExp("pattern"[,"flag"]);
pattern 要匹配的模式,flag表示搜尋模式,有2個選擇性參數
g,i, g表示全域搜尋,i表示忽略大小寫,預設情況下是
大小寫敏感,
 //這種以/開始和/結尾的字元序列稱為Regex。
            /*→Regex函數 與 C# 裡面的用法區別還蠻大的。
         RegExp JavaScirpt 中的Regex對象,利用它可以完成字串的匹配的各種操作
             var objRegExp=/regularExpression/[g|i]
             var objRegExp=new RegExp(/regularExpression/[g|i]);
        
         說明 :g|i 可選,g 表示全域搜尋,i 表示忽略大小寫, 在Replace 方法中非常有用
            
         →方法:
         exec(str) 返回數組
         test(str) 返回bool 值
        
         →靜態屬性: 最好不要用(被他搞暈了)
         RegExp.input 儲存被--搜尋---的字串
         RegExp.index 儲存匹配的首字元的位置(0開始)
         RegExp.lastindex 儲存匹配字串的下一個字元的位置
         RegExp.lastMatch 儲存匹配到的字串(包括括弧外面)
         RegExp.lastParen 儲存最後一個匹配的字串 (最後一個括弧的內容)
         RegExp.leftContext  儲存匹配字串左邊的內容
         RegExp.rightContext 儲存匹配字串右邊的內容
        
         RegExp.$1~$9 儲存最開始的9個匹配項(括弧中的內容)

        
         →提取字串
        
         字串.search(regularExpression)  返回第一個字元的索引位置,否則返回 -1,和index 功能相似
         字串.replace(regularExpression,replaceString) 返回一個新的字串,常用就是刪除html標記
         字串.match(regularExpression)   返回一個數組,和RegExp 功能相似
        
         注意:hrefurl=$("#TextArea1").html()+ alert(hrefurl);列印出來的字串,html標記都被替換掉了,奇蹟
         hrefurl=$("#TextArea1").html() +regExp=/href=(.*)><b>(\w+)<\/b>/;+regExp.exec(hrefurl); 
         +hrefstr="RegExp.input:"+RegExp.input;   ==得到竟然是 #TextArea1
      
       */        
//          hrefurl=$("#TextArea1").val();      
//         
//          regExp=/a+?/g;
//         
////        var arr=hrefurl.match(regExp);      
////        alert(arr[5]);  
//          arr=regExp.exec(hrefurl);         
//          hrefbool=regExp.test(hrefurl);       
//     
//          alert(RegExp.lastIndex);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.