close

按此前往javascript完整教學目錄

 

 

 

在物件中可存放多個變數、多個函式。

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設定nameage,為何連person1nameage也跟著改變了?事實上,這是因為在javascript中,person1、和person2都是一個指標,且指向同一個物件。var person2=person1;這一行,只不過是將指標person1複製到一個新的指標person2,卻不是複製新的物件。

要複製新的物件,得用以下寫法:

var person2=JSON.parse(JSON.stringify(person1));

如此一來,person2person1所指的就是兩個獨立的物件,彼此不會互相影響了。

 

4. with的用法:

with(物件){//程式碼;}的用法可以讓操作物件的程式碼變得簡單,表示內部程式碼都在該物件底下執行。以上例的person1物件為例:

document.write(person1.name+":"+person1.age);

這寫法相當於:

with(person1)

{ document.write(name+":"+age);}

執行後都會顯示weiwei:18

這用法方便於對同一物件進行多次操作時。

 

 

上一篇:javascript 遞迴函式

下一篇:javascript 日期物件 Date

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()