在JS中,創(chuàng )建對象(Create Object)并不完全是我們時(shí)常說(shuō)的創(chuàng )建類(lèi)對象,JS中的對象強調的是一種復合類(lèi)型,JS中創(chuàng )建對象及對對象的訪(fǎng)問(wèn)是極其靈活的。
JS對象是一種復合類(lèi)型,它允許你通過(guò)變量名存儲和訪(fǎng)問(wèn),換一種思路,對象是一個(gè)無(wú)序的屬性集合,集合中的每一項都由名稱(chēng)和值組成(聽(tīng)起來(lái)是不是很像我們常聽(tīng)說(shuō)的HASH表、字典、健/值對?),而其中的值類(lèi)型可能是內置類(lèi)型(如number,string),也可能是對象。
一、由一對大括號括起來(lái)
var emptyObj = {};
var myObj =
{
'id': 1, //屬性名用引號括起來(lái),屬性間由逗號隔開(kāi)
'name': 'myName'
};
//var m = new myObj(); //不支持
不知你注意到對象都是用 var聲明的沒(méi)有,像上面的代碼,就只是簡(jiǎn)單的聲明一個(gè)對象,它只有一份拷貝,你不能像實(shí)例化類(lèi)對象一樣對它采用new操作,像上面代碼的注釋部分。這樣就極大的限制了對象的重用,除非你建立的對象只需要一份拷貝,否則考慮用其他方法建立對象。
下面一起看看如何訪(fǎng)問(wèn)對象的屬性和方法。
var myObj =
{
'id': 1,
'fun': function() {
document.writeln(this.id + '-' + this.name);//以"對象.屬性"方式訪(fǎng)問(wèn)
},
'name': 'myObj',
'fun1': function() {
document.writeln(this['id'] + '+' + this['name']);//以集合方式訪(fǎng)問(wèn)
}
};
myObj.fun();
myObj.fun1();
// 結果
// 1-myObj 1+myObj
二、用 function 關(guān)鍵字模擬 class
在 function 中用 this 引用當前對象,通過(guò)對屬性的賦值來(lái)聲明屬性。如果用var聲明變量,則該變量為局部變量,只允許在類(lèi)定義中調用。
function myClass() {
this.id = 5;
this.name = 'myclass';
this.getName = function() {
return this.name;
}
}
var my = new myClass();
alert(my.id);
alert(my.getName());
// 結果
// 5
// myclass
三、在函數體中創(chuàng )建一個(gè)對象,聲明其屬性再返回
在函數體中創(chuàng )建對象可利用第一點(diǎn)的方法,或先 new Object(); 再為各屬性賦值。
不過(guò)用這種方式創(chuàng )建的對象在VS2008 SP1中是沒(méi)有智能提示的。
function myClass() {
var obj =
{
'id':2,
'name':'myclass'
};
return obj;
}
function _myClass() {
var obj = new Object();
obj.id = 1;
obj.name = '_myclass';
return obj;
}
var my = new myClass();
var _my = new _myClass();
alert(my.id);
alert(my.name);
alert(_my.id);
alert(_my.name);
// 結果
// 2
// myclass
// 1
// _myclass
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。