在ecmascript中無法建立類,所以開發人員就發明了一種函式,用函式來封裝,以特定介面建立物件的細節,如下面的例子所示:
function createperson(name,age,job)
return temp;
}var person1=createperson("nick",20,"student");
var person2=createperson("lucy",24,"doctor");
person1.sayname();//nick
person2.sayname();//lucy
person1==person2;//false
函式createperson能夠根據接受的引數來構建乙個person物件.我們可以無數次的呼叫這個函式,而每次它返回乙個包括三個屬性乙個方法的物件.
ecmascript中的建構函式可用來建立特定型別的物件.我們可以建立自定義的建構函式,從而定義自定義物件物件型別的屬性和方法,如下面的例子所示:
function person(name,age,job);
}var person1=new person("nick",20,"student");
var person2=new person("lucy",22,"doctor");
person1.sayname();//nick
person2.sayname();//lucy
person1==person2;//false
我麼可以看到,person()中的**並沒有顯示地建立物件,而是直接將屬性和方法賦給了this物件.要建立person的例項,必須使用new操作符,以呼叫建構函式的方式建立物件實際上經歷以下4個步驟:
建立乙個新物件;
將建構函式的作用域賦給新物件(此時this就指向了這個新物件);
執行建構函式裡面的**(為這個新物件新增屬性和方法);
返回新物件
在上面的**中可以看到,person1和person2分別儲存著person的不同例項,這兩個物件都有乙個constructor(建構函式)屬性,該屬性指向person,如下面所示:
person1.constructor==person;//true
person2.constructor==person;//true
我們建立的每個函式都有乙個prototype(原型)屬性,這個屬性是乙個指標,指向乙個物件,而這個物件的用途是包含可以由特定型別的所有例項共享的屬性和方法.使用原型物件的好處是可以讓所有物件例項共享它所包含的屬性和方法.換句話說,不必在建構函式中定義物件例項的資訊,而是可以將這些資訊直接新增到原型物件當中,如下面的例子所示:
"use strict"//執行嚴格模式
function person()
person.prototype.name="nick";
person.prototype.age="24";
person.prototype.job="student";
person.prototype.sayname=function()
var person1=new person();
var person2=new person();
person1.sayname();//nick
person2.sayname();//nick
person1==person2;//false
person1.sayname==person2.sayname;//true
我們將sayname()方法和所有屬性都直接新增到了person的prototype屬性中,建構函式變成了空函式.但與建構函式模式不同的是,新物件的這些屬性和方法是由所有例項共享的.換句話說,person1和person2訪問的都是同一組屬性和同乙個sayname()函式.
JavaScript建立物件
一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...
JavaScript 建立物件
工廠模式抽象了建立具體物件的過程,能夠快速建立大量具有相似屬性及方法的物件。function createperson name,age,job obj.name name obj.age age obj.job job obj.sayname function return obj var per...
JavaScript 建立物件
function person var person new person 複製 使用關鍵字new建立新例項物件經過了以下幾步 1 建立乙個新物件,如 var person 2 新物件的 proto 屬性指向建構函式的原型物件。3 將建構函式的作用域賦值給新物件。也所以this物件指向新物件 4 執...