1.對象
對象是物件導向程式設計的基礎概念之一,只需看看這個名字就已經知道了。在我們 熟悉的物件導向語言中,比如Java或者C++,都有著類似的對象定義方法。比如,我們想定義一個類,名 字叫Person,有兩個屬性:name和age,另外有一個方法,將顯示出這個Person對象的名字和年齡,那麼 我們可以用下面的代碼實現:
Java:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void introduction() {
System.out.println("My name is " + this.name + ", my age is " + this.age);
}
public static void main(String[] args) {
Person p = new Person();
p.setName("Tom");
p.setAge(20);
p.introduction();
}
}
C++的實現也是類似的,這裡不再贅述。
我們先來看一下這個類的定義:首先 聲明屬性,然後定義屬性的getter和setter方法,用來外界訪問私人變數,最後定義了它自己的方法。 這是一個比較常見的定義方式,以至於以後的很多語言,比如C#,都採用這種定義。
那麼,什麼 是對象呢?對象不過是具有特定屬性和方法的集合。雖然這並不是一個嚴格的定義,但是將屬性和它的 名字(不妨我們把它的方法也看作是它的屬性,這並沒有什麼不同)放在一起,形成一個集合,這就是對 象。也就是說,簡單來看,對象就是這種具有“鍵-值”對的形式。
2.JavaScript的 對象
“鍵-值”對的形式……這個樣子看上去是不是有些面熟?Bingo! 對了!這不就是數組的形式嗎?嗯,恭喜你想到這一點!的確,在JavaScript中,對象的定義就是像數 組的定義。下面,我們在JavaScript中對這個Person進行一下定義:
var Person = {
"name": "Tom",
"age": 20,
"introduction": function() {
alert("My name is " + this.name + ", my age is " + this.age);
}
};
Person.introduction();
來看一下這段代碼。看上去很像數組的定義,只不 過數組一般使用數字類型作為下標,而這裡我們使用的是字串。回想一下,其實在 JavaScript中,字 符串也是可以作為數組下標的,不是嗎?好了,這裡我們聲明了一個對象Person,它有一個name,還有 一個age,而且還有一個方法顯示出這兩個屬性。
在JavaScript中,對象就是“鍵-值 ”對的形式,具體來說是"string-as-key": object-as-value的形式。也就是說,這個 鍵必須是string類型的,而值可以是任何類型的。那麼,方法呢?其實,JavaScript中的function也是 一個類型,這個在後面會有描述的,這裡僅僅Crowdsourced Security Testing道就可以了。這種數學上成為二元組的樣式很常見, 數組就是這樣的,只不過數組的鍵必須是int。同樣,JavaScript的對象也是一個特殊的二元組,只不過 鍵是string類型的。這是不是就像是一種散列?或者說是雜湊表?就是這個樣子!
如果說你覺得 每個屬性名稱都要加一個引號覺得很彆扭,那麼你大可不加!像下面的語句,JavaScript完全認為你的正 確的:
var Person = {
name: "Tom",
age: 20,
introduction: function() {
alert("My name is " + this.name + ", my age is " + this.age);
}
}
Person.introduction();
我比較習慣於這種寫法,看上去和Java等語言差不多 。