帶有屬性和方法的特殊數據類型,而每一個屬性或者方法又可看作是一個鍵值對,所以能夠這樣定義:對象是一系列無序鍵值對的集合javascript
你本身建立的對象html
1 對象初始化器,這種方式最爲簡單暴力,直接一系列明顯的鍵值對集合。java
var obj={ name:'PengL', age:100, func:function() { alert("I am "+obj.name+" and I am "+obj.age); } };
2 構造函數數組
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);
說明:第一種方法是直接建立的一個對象的實例,第二種是經過new構造函數的方式來建立一個對象,而且傳入不一樣的參數,這樣對象對應的屬性值就不同。不過要注意的是不要忘了new,否則就是把一個普通函數賦給了obj,而且這時的this指向也是混亂的了。關於this指向的問題能夠參考一下做者的另外一篇博客javascript進階之this函數
通常在真實的項目中上面demo的寫法實際上是不合理的。最好的方式是原型和構造函數混用的方式來作,好比上面的能夠改爲這樣this
function person(name,age) { this.name=name; this.age=age; } person.prototype.func=function(){ alert("I am "+this.name+" and I am "+this.age); };
這種方式不只結構清楚,最重要的是還節約了內存,在對象的原型上建立的方法,那麼這個方法就是經過該構造函數所建立的全部對象共有的方法了。各個對象有本身獨有的name,age屬性,有共有的func方法。若是有對原型不熟悉的同窗能夠看看這篇廖雪峯大神的做品廖雪峯prototype