在物件中可存放多個變數、多個函式。
在javascript中,任何資料型態,包括數字、字串、函式、矩陣、html標籤…等等都可當作物件(Object),這點與c++等語言是不同的。
1. 物件的宣告與存取:
(1)在javascript裡宣告物件,不同於C++或php,不需要宣告類別,而是直接宣告物件。宣告方法有許多種:
(1-1) 先宣告物件,再於物件外部設定物件成員與成員函式:
var 物件名稱 = new Object(); 或是 var 物件名稱;
物件名稱.成員名稱1=值1;
物件名稱.成員名稱2=值2;
…
物件名稱.成員函式名稱1=function(參數列){//程式內容;};
(1-2)宣告物件時也設定物件成員與成員函式:
(1-2-1):
var 物件名稱 = new Object(
{
“成員名稱1”:值1,
“成員名稱2”:值2,
…
“成員函式名稱1”: function(參數列){//程式內容;}
}
);
(1-2-2):成員名稱也可不用雙引號包覆:
var 物件名稱 = new Object(
{
成員名稱1:值1,
成員名稱2:值2,
…
成員函式名稱1: function(參數列){//程式內容;}
}
);
(1-2-3):也可省略new Object():
var 物件名稱 =
{
成員名稱1:值1,
成員名稱2:值2,
…
成員函式名稱1: function(參數列){//程式內容;}
};
(2) 物件成員的存取:
方法不只一種,都可達成同樣的效果。如下:
(2-1) 讀取成員:
※ 物件名稱.成員名稱;
※ 物件名稱[“成員名稱”];
※ 物件名稱[‘成員名稱’]
(2-2) 設定成員:
※ 物件名稱.成員名稱 = 值;
※ 物件名稱[“成員名稱”] = 值;
※ 物件名稱[‘成員名稱’] = 值;
(3) 範例如:
var person1= new Object({
"name":"weiwei",
"age":18,
"salary":2500,
"position":"流風名媛",
"self_introduction_to":function(s){
document.write("嗨!"+s+".我是"+this.name+",今年"+this.age+"...請多多指教!");}
});
//存取物件成員及成員函式的方法如下:
document.write(person1.name); //顯示:weiwei
person1.self_introduction_to("乘龍"); //顯示:嗨!乘龍.我是weiwei,今年18...請多多指教!
//註:javascript可以用eval內建函式使得使用者在某些操作之後,利用外部宣告來創造物件的成員與成員函式。
2. 物件內部成員、成員函式的操作:
(1) 獲取一物件的內部資訊(for in 用法):
for(代號 in 物件){ //內部程式碼}
此for輪流經過該物件中的每一個成員或成員函式。在內部程式碼的寫法裡,this關鍵字代表該物件本身;代號可以是自訂的,其代表的是每一個成員或成員函式;物件[代號]代表的是該成員或成員函式的值。請看下例:
var person1= new Object({
name:"weiwei",
age:18,
salary:2500,
position:"流風名媛",
self_introduction_to:function(s){
document.write("嗨!"+s+".我是"+this.name+",今年"+this.age+"...請多多指教!");}
});
for (a in person1)
{ document.write(a+":"+person1[a]+"<br/>");}
則檔案執行後,顯示:
name:weiwei
age:18
salary:2500
position:流風名媛
self_introduction_to:function(s){ document.write("嗨!"+s+".我是"+this.name+",今年"+this.age+"...請多多指教!");}
這方法也可用來檢視所有的html物件。
(2) 檢查一物件中是否有某些成員或成員函式(in關鍵字的用法):
“成員或成員函式名稱” in 物件名稱;
此用法會回傳一個bool。若為true,表示在此物件之中有個名為成員或成員函式名稱的成員或成員函式,若為false則否。
(3) 刪除一物件內部的成員或成員函式(delete關鍵字的用法):
delete 物件名稱.成員或成員函式名稱;
即可刪除該物件中該成員或成員函式。
3. 物件的複製:
當我們在javascript中宣告物件時,譬如:
var 物件名稱 = new Object();
程式碼中的物件名稱事實上不是指物件本身,而是指一個「連接到物件本身的指標」。我們是藉由對這個指標進行操作,進而操作物件的。請看下例:
var person1= new Object({
name:"weiwei",
age:18,
salary:2500,
position:"流風名媛",
self_introduction_to:function(s){
document.write("嗨!"+s+".我是"+this.name+",今年"+this.age+"...請多多指教!");}
});
var person2=person1;
person2.name="nunu";
person2.age=20;
document.write(person1.name+":"+person1.age+","+person2.name+":"+person2.age);
執行結果卻顯示:
nunu:20, nunu:20
對於熟悉C++等語言的人來說會感到奇怪,明明只對person2設定name和age,為何連person1的name和age也跟著改變了?事實上,這是因為在javascript中,person1、和person2都是一個指標,且指向同一個物件。var person2=person1;這一行,只不過是將指標person1複製到一個新的指標person2,卻不是複製新的物件。
要複製新的物件,得用以下寫法:
var person2=JSON.parse(JSON.stringify(person1));
如此一來,person2和person1所指的就是兩個獨立的物件,彼此不會互相影響了。
4. with的用法:
with(物件){//程式碼;}的用法可以讓操作物件的程式碼變得簡單,表示內部程式碼都在該物件底下執行。以上例的person1物件為例:
document.write(person1.name+":"+person1.age);
這寫法相當於:
with(person1)
{ document.write(name+":"+age);}
執行後都會顯示weiwei:18。
這用法方便於對同一物件進行多次操作時。
留言列表