? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? JavaScript中的對(duì)象
? ? ? ? ?面向?qū)ο螅∣bject-Oriented,OO)的語言有一個(gè)標(biāo)志指黎,那就是他們都沒有類的概念浅碾,而通過類可以創(chuàng)建任意多個(gè)具有相同屬性和方法的對(duì)象。
? ? ? ? ?ECMA-262把對(duì)象定義為:“無序?qū)傩缘募辖。鋵傩钥梢园ɑ局倒浼琛?duì)象或者函數(shù)”
? ? ? ? ?創(chuàng)建自定義對(duì)象的最簡(jiǎn)單方式就是創(chuàng)建一個(gè)Object的實(shí)例薪棒,然后再為它添加屬性和方法造成。如下:
var person=new object();
person.name="xiaoming";
person.age=29;
person.job="Software Engineer";
person.sayName=function(){
? ? ? ? ? ? ? ?alert(this.name);
}
上面的例子中創(chuàng)建了一個(gè)名為person的對(duì)象显熏,并為它吸納三個(gè)屬性(name、age和job)和一個(gè)方法(sayName())晒屎。sayName()方法用于顯示this.name的值喘蟆。早期的JavaScript的開發(fā)人員經(jīng)常使用這個(gè)模式創(chuàng)建新對(duì)象。幾年后夷磕,對(duì)象字面量成為創(chuàng)建對(duì)象的首選模式履肃,如下:
var person={
? ? ? ? ? name"xiaoming:",
? ? ? ? ? age:29,
? ? ? ? ? job:"SoftwareEngineer",
sayName:function(){
? ? ? ? ? ? ? ?alert(this.name);
? ? ? }
}
? ? ? ? ?//JavaScript的對(duì)象是一種無序的集合數(shù)據(jù)類型,它由若干鍵值對(duì)組成坐桩。//
? ? ? ? ?JavaScript的對(duì)象用于描述現(xiàn)實(shí)世界中的某個(gè)對(duì)象。
? ? ? ? ?JavaScript用一個(gè){...}表示一個(gè)對(duì)象封锉,鍵值對(duì)以xxx: xxx形式申明绵跷,用,隔開。注意成福,最后一個(gè)鍵值對(duì)不需要在末尾加,碾局,如果加了,有的瀏覽器(如低版本的IE)將報(bào)錯(cuò)奴艾。
? ? ? ? ?實(shí)際上JavaScript對(duì)象的所有屬性都是字符串净当,不過屬性對(duì)應(yīng)的值可以是任意數(shù)據(jù)類型。
? ? ? ? ? 如果訪問一個(gè)不存在的屬性會(huì)返回什么呢?JavaScript規(guī)定像啼,訪問不存在的屬性不報(bào)錯(cuò)俘闯,而是返回undefined:
? ? ? ? ? 由于JavaScript的對(duì)象是動(dòng)態(tài)類型,你可以自由地給一個(gè)對(duì)象添加或刪除屬性:
var xiaoming = { name:'小明'};
xiaoming.age;// undefined
xiaoming.age =18;// 新增一個(gè)age屬性
xiaoming.age;// 18
deletexiaoming.age;// 刪除age屬性
xiaoming.age;// undefineddelete
xiaoming['name'];// 刪除name屬性
xiaoming.name;// undefined
deletexiaoming.school;// 刪除一個(gè)不存在的school屬性也不會(huì)報(bào)錯(cuò)
如果我們要檢測(cè)xiaoming是否擁有某一屬性忽冻,可以用in操作符:
'name'inxiaoming;//true?
'grade'inxiaoming;//false
in判斷一個(gè)屬性存在真朗,這個(gè)屬性不一定是xiaoming的,它可能是xiaoming繼承得到的:
'toString'inxiaoming;//true
? ? ? ? 因?yàn)閠oString定義在object對(duì)象中僧诚,而所有對(duì)象最終都會(huì)在原型鏈上指向object遮婶,所以xiaoming也擁有toString屬性。
? ? ? ? 要判斷一個(gè)屬性是否是xiaoming自身擁有的湖笨,而不是繼承得到的旗扑,可以用hasOwnProperty()方法:
var xiaoming = {name:'小明'};xiaoming.hasOwnProperty('name');//true
xiaoming.hasOwnProperty('toString');//false
? ? ? ? ?無論該屬性存在于實(shí)例中還是在原型中。同時(shí)使用hasOwnProperty()方法和in操作符慈省,就可以確定該屬性到底是存在于對(duì)象中肩豁,還是存在于原型中。