? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? JavaScript中的對象
? ? ? ? ?面向對象(Object-Oriented,OO)的語言有一個標志,那就是他們都沒有類的概念,而通過類可以創(chuàng)建任意多個具有相同屬性和方法的對象。
? ? ? ? ?ECMA-262把對象定義為:“無序屬性的集合,其屬性可以包括基本值、對象或者函數(shù)”
? ? ? ? ?創(chuàng)建自定義對象的最簡單方式就是創(chuàng)建一個Object的實例,然后再為它添加屬性和方法。如下:
var person=new object();
person.name="xiaoming";
person.age=29;
person.job="Software Engineer";
person.sayName=function(){
? ? ? ? ? ? ? ?alert(this.name);
}
上面的例子中創(chuàng)建了一個名為person的對象,并為它吸納三個屬性(name、age和job)和一個方法(sayName())。sayName()方法用于顯示this.name的值。早期的JavaScript的開發(fā)人員經常使用這個模式創(chuàng)建新對象。幾年后,對象字面量成為創(chuàng)建對象的首選模式,如下:
var person={
? ? ? ? ? name"xiaoming:",
? ? ? ? ? age:29,
? ? ? ? ? job:"SoftwareEngineer",
sayName:function(){
? ? ? ? ? ? ? ?alert(this.name);
? ? ? }
}
? ? ? ? ?//JavaScript的對象是一種無序的集合數(shù)據(jù)類型,它由若干鍵值對組成。//
? ? ? ? ?JavaScript的對象用于描述現(xiàn)實世界中的某個對象。
? ? ? ? ?JavaScript用一個{...}表示一個對象,鍵值對以xxx: xxx形式申明,用,隔開。注意,最后一個鍵值對不需要在末尾加,,如果加了,有的瀏覽器(如低版本的IE)將報錯。
? ? ? ? ?實際上JavaScript對象的所有屬性都是字符串,不過屬性對應的值可以是任意數(shù)據(jù)類型。
? ? ? ? ? 如果訪問一個不存在的屬性會返回什么呢?JavaScript規(guī)定,訪問不存在的屬性不報錯,而是返回undefined:
? ? ? ? ? 由于JavaScript的對象是動態(tài)類型,你可以自由地給一個對象添加或刪除屬性:
var xiaoming = { name:'小明'};
xiaoming.age;// undefined
xiaoming.age =18;// 新增一個age屬性
xiaoming.age;// 18
deletexiaoming.age;// 刪除age屬性
xiaoming.age;// undefineddelete
xiaoming['name'];// 刪除name屬性
xiaoming.name;// undefined
deletexiaoming.school;// 刪除一個不存在的school屬性也不會報錯
如果我們要檢測xiaoming是否擁有某一屬性,可以用in操作符:
'name'inxiaoming;//true?
'grade'inxiaoming;//false
in判斷一個屬性存在,這個屬性不一定是xiaoming的,它可能是xiaoming繼承得到的:
'toString'inxiaoming;//true
? ? ? ? 因為toString定義在object對象中,而所有對象最終都會在原型鏈上指向object,所以xiaoming也擁有toString屬性。
? ? ? ? 要判斷一個屬性是否是xiaoming自身擁有的,而不是繼承得到的,可以用hasOwnProperty()方法:
var xiaoming = {name:'小明'};xiaoming.hasOwnProperty('name');//true
xiaoming.hasOwnProperty('toString');//false
? ? ? ? ?無論該屬性存在于實例中還是在原型中。同時使用hasOwnProperty()方法和in操作符,就可以確定該屬性到底是存在于對象中,還是存在于原型中。