JS中一切皆為對(duì)象蝶溶,這是一句常說的話。了解JS對(duì)象宣渗,從這句話開始吧。JS中的基本數(shù)據(jù)類型如number梨州,bool痕囱,字符串,數(shù)組暴匠,null鞍恢,undefined等等都是對(duì)象。
對(duì)象的本質(zhì):
帶有屬性和方法的特殊數(shù)據(jù)類型每窖,而每個(gè)屬性或者方法又可看做是一個(gè)鍵值對(duì)帮掉,因此可以這樣定義:對(duì)象是一系列無序鍵值對(duì)的集合
在JS中對(duì)象分為兩種:
- JS的內(nèi)建對(duì)象,如:string窒典,Date蟆炊,Array等
- 你自己創(chuàng)建的對(duì)象
JS中如何創(chuàng)建自己的對(duì)象:
1 對(duì)象初始化器,這種方式最為簡(jiǎn)單暴力,直接一系列明顯的鍵值對(duì)集合瀑志。
var obj={
name:'PengL',
age:100,
func:function()
{
alert("I am "+obj.name+" and I am "+obj.age);
}
};
2 構(gòu)造函數(shù)
function person(name,age){
this.name=name;
this.age=age;
this.func=func;
function func()
{
alert("I am "+this.name+" and I am "+this.age);
}
}
var obj=new person("PengL",100);
說明:第一種方法是直接創(chuàng)建的一個(gè)對(duì)象的實(shí)例涩搓,第二種是通過new構(gòu)造函數(shù)的方式來創(chuàng)建一個(gè)對(duì)象污秆,并且傳入不同的參數(shù),這樣對(duì)象對(duì)應(yīng)的屬性值就不一樣昧甘。不過要注意的是不要忘了new良拼,不然就是把一個(gè)普通函數(shù)賦給了obj,并且這時(shí)的this指向也是混亂的了充边。關(guān)于this指向的問題可以參考一下作者的另一篇博客javascript進(jìn)階之this
對(duì)于構(gòu)造函數(shù)創(chuàng)建對(duì)象的方法我還想再進(jìn)一步介紹一下
一般在真實(shí)的項(xiàng)目中上面demo的寫法其實(shí)是不合理的庸推。最好的方式是原型和構(gòu)造函數(shù)混用的方式來做,比如上面的可以改成這樣
function person(name,age)
{
this.name=name;
this.age=age;
}
person.prototype.func=function(){
alert("I am "+this.name+" and I am "+this.age);
};
這種方式不僅結(jié)構(gòu)清楚浇冰,最重要的是還節(jié)約了內(nèi)存贬媒,在對(duì)象的原型上創(chuàng)建的方法,那么這個(gè)方法就是通過該構(gòu)造函數(shù)所創(chuàng)建的所有對(duì)象共有的方法了湖饱。各個(gè)對(duì)象有自己獨(dú)有的name掖蛤,age屬性,有共有的func方法井厌。如果有對(duì)原型不熟悉的同學(xué)可以看看這篇廖雪峰大神的作品廖雪峰
最后再做一下總結(jié)吧蚓庭,加深一下印象
- JS中一切皆對(duì)象
- 對(duì)象本質(zhì)是一系列無序鍵值對(duì)的集合
- 創(chuàng)建對(duì)象有兩種常見的方法,初始化器和構(gòu)造函數(shù)(不同情況來進(jìn)行選擇仅仆,并非總是第二種最好)