Constructor是一種在內(nèi)存已分配給該對(duì)象的情況下泽腮,用于初始化新創(chuàng)建對(duì)象的特殊方法。Object構(gòu)造器用于創(chuàng)建特定類型的對(duì)象–準(zhǔn)備好對(duì)象以備使用玖姑,同事接收構(gòu)造器可以使用參數(shù)端朵,以在第一次創(chuàng)建對(duì)象時(shí),設(shè)置成員屬性和方法值承疲。
一邻耕、對(duì)象創(chuàng)建
創(chuàng)新新對(duì)象,在javascript中通常有兩種方法:
1.對(duì)象直面量方法
????var newObj = {};
2.構(gòu)造器的簡(jiǎn)潔方法
????var newObj = new Object();
????在Object構(gòu)造器為特定的值創(chuàng)建對(duì)象封裝燕鸽,或者沒有傳遞值時(shí)兄世,它將創(chuàng)建一個(gè)空對(duì)象并返回
3.對(duì)象賦值的方法:
? ? 3.1“點(diǎn)”方法
????????//設(shè)置屬性
????????newObj.name = 'LanFeng';
????????//獲取值
????????var user= newObj.name;
????????中括號(hào)方法
????????//設(shè)置屬性
????????newObj["name"]= 'LanFeng';
????????//獲取值
???????var user= newObj["name"];
4.Object.defineProperty (適用ECMAScript5)
????//設(shè)置屬性
????Object.defineProperty(newObj,"name",{
? ????? value:"LanFeng",
? ? ????writable:true,
? ????? enumerable:true,
? ? ????configurable:true
????})
5.Object.defineProperties
????????//設(shè)置屬性
????????Object.defineProperties(newObj,{
? ? ???????? "someKey":{
? ? ? ????????? value:"Hello Js",
? ? ? ? ???????? writable:true
? ????????? },
? ????????? "anotherKey":{
? ? ? ? ????????value:"Foo bar",
? ? ? ????????? writable:false
? ????????? }
????????})
Javascript不支持類的概念,但它確實(shí)支持與對(duì)象一起用的特殊constructor函數(shù)啊研,通過在構(gòu)造器前面加new關(guān)鍵字御滩,告訴js像使用構(gòu)造器一樣實(shí)例化一個(gè)新對(duì)象鸥拧,并且對(duì)象成員由該函數(shù)定義。
二削解、在構(gòu)造器內(nèi)富弦,關(guān)鍵字this引用新創(chuàng)建的對(duì)象》胀裕回顧對(duì)象創(chuàng)建腕柜,基本的構(gòu)造器:
function Car(model,year,miles){
? ? this.model = model;
? ? this.year = year;
? ? this.miles = miles;
? ? this.toString = function(){
? ? return this.model + "has done" + this.miles +"miles";
? ? }
}
//創(chuàng)建實(shí)例化對(duì)象
var civio = new Car("Honda Civio",2009,20000);
var mondeo= new Car("Ford Mondeo",2009,5000);
上面例子是一個(gè)簡(jiǎn)單的構(gòu)造器模式版本,但它確實(shí)存在一些問題柳爽,其中一個(gè)問題是媳握,它使用繼承變得困難,另外一個(gè)問題是磷脯,toString()這樣的函數(shù)是為每個(gè)使用Car構(gòu)造器創(chuàng)建的新對(duì)象而分別重新定義的蛾找,這個(gè)不是最理想的,因?yàn)檫@種函數(shù)應(yīng)該在所有的Car類型實(shí)例直接共享赵誓。
javascript中有有一個(gè)prototype的屬性打毛,調(diào)用js構(gòu)造器創(chuàng)建一個(gè)對(duì)象后,新對(duì)象就會(huì)具有構(gòu)造器原型的所有屬性俩功,通過這種方式幻枉,可以創(chuàng)建多個(gè)對(duì)象,并訪問相同的原型诡蜓,實(shí)現(xiàn)方法共享熬甫。
function Car(model,year,miles){
? ? this.model = model;
? ? this.year = year;
? ? this.miles = miles;
}
//原型函數(shù)
Car.prototype.toString = function(){
? ? return this.model + "has done" + this.miles +"miles";
? ? }
//創(chuàng)建實(shí)例化對(duì)象
var civio = new Car("Honda Civio",2009,20000);
var mondeo= new Car("Ford Mondeo",2009,5000);
console.log(civio.toString())
console.log(mondeo.toString())
現(xiàn)在toString()的單一實(shí)例就能夠在所有Car對(duì)著之間共享。
-----------------------------------
?著作權(quán)歸作者所有:來自51CTO博客作者前端嵐楓的原創(chuàng)作品蔓罚,請(qǐng)聯(lián)系作者獲取轉(zhuǎn)載授權(quán)椿肩,否則將追究法律責(zé)任
javascript設(shè)計(jì)模式-Constructor(構(gòu)造器)模式
https://blog.51cto.com/u_15703146/5431835