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);