JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式實(shí)例分析
本文實(shí)例講述了JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式。分享給大家供大家參考,具體如下:
經(jīng)典的OOP語(yǔ)言中,構(gòu)造器(也叫構(gòu)造函數(shù))是一個(gè)用于初始化對(duì)象的特殊方法。在JS中,因?yàn)橐磺薪詫?duì)象,對(duì)象構(gòu)造器經(jīng)常被提起。
對(duì)象構(gòu)造器用于建立制定類型(Class)的對(duì)象,可以接受參數(shù)用于初始化對(duì)象的屬性和方法。
對(duì)象建立
在JS中,有三個(gè)常用的方法用于建立對(duì)象:
//1, 推薦使用
var newObject = {};
//2,
var newObject = Object.create( null );
//3, 不推薦
var newObject = new Object();
但是,這也只是建立了三個(gè)空對(duì)象, 并沒有任何屬性和方法。我們可以通過(guò)以下四種方法,為對(duì)象設(shè)立屬性和方法。
// ECMAScript 3 兼容的方式
// 1. 常規(guī)對(duì)象定義方式
//設(shè)置屬性
newObject.someKey = "Hello World";
//獲取屬性
var key = newObject.someKey;
// 2. 方括號(hào)方式
// 設(shè)置屬性
newObject["someKey"] = "Hello World";
//獲取屬性
var key = newObject["someKey"];
// 僅僅用于ECMAScript 5
// 3. Object.defineProperty
// 設(shè)置屬性
Object.defineProperty(
newObject, "someKey",
{ value: "for more control of the property's behavior",
writable: true,
enumerable: true,
configurable: true
});
//可以通過(guò)下面的函數(shù)簡(jiǎn)化屬性設(shè)置
var defineProp = function ( obj, key, value ){
config.value = value;
Object.defineProperty( obj, key, config );
};
// 使用方法
var person = Object.create( null );defineProp( person, "car", "Delorean" );
defineProp( person, "dateOfBirth", "1981" );
defineProp( person, "hasBeard", false );
// 4. Object.defineProperties
//設(shè)置屬性
Object.defineProperties(
newObject,
{ "someKey": { value: "Hello World", writable: true },
"anotherKey": { value: "Foo bar", writable: false }
});
// 3和4的獲取屬性方法同1,2.
基本的構(gòu)造器
我們知道, JS中沒有Class的概念,但它也支持用構(gòu)造器建立對(duì)象。
通過(guò)使用【new】關(guān)鍵字,我們可以使一個(gè)函數(shù)的舉止類似于構(gòu)造器,從而建立自己的對(duì)象實(shí)例。
一個(gè)基礎(chǔ)的構(gòu)造器形式如下:
function Car( model, year, miles ) {
//這里,this指向新建立的對(duì)象自己
this.model = model;
this.year = year;
this.miles = miles;
this.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
}
//用法
// 建立兩個(gè)car實(shí)例
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
// 輸出結(jié)果
console.log( civic.toString() );
console.log( mondeo.toString() );
這就是簡(jiǎn)單的構(gòu)造器模式, 它有兩個(gè)主要問(wèn)題,
第一,它很難繼承;第二,toString()被每一個(gè)對(duì)象實(shí)例定義一遍,作為函數(shù),它應(yīng)該被每一個(gè)Car類型的實(shí)例共享。
使用原型的構(gòu)造器
JS中有一個(gè)很好的特性:原型【Prototype】,
利用它,建立對(duì)象時(shí),所有構(gòu)造器原型中的屬性都可以被對(duì)象實(shí)例獲得。
這樣多個(gè)對(duì)象實(shí)例就可以共享同一個(gè)原型。
我們改善前面的Car例子如下:
function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
}
Car.prototype.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
// 用法
var civic = new Car( "Honda Civic", 2009, 20000 );
var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
//輸出
console.log( civic.toString() );
console.log( mondeo.toString() );
在上面的例子中,toString()方法被多個(gè)Car對(duì)象實(shí)例共享。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JavaScript設(shè)計(jì)模式之工廠模式和構(gòu)造器模式
- JavaScript設(shè)計(jì)模式之單例模式原理與用法實(shí)例分析
- JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】
- JavaScript設(shè)計(jì)模式之裝飾者模式定義與應(yīng)用示例
- JavaScript 設(shè)計(jì)模式 安全沙箱模式
- JavaScript設(shè)計(jì)模式之觀察者模式(發(fā)布者-訂閱者模式)
- JavaScript 設(shè)計(jì)模式之組合模式解析
- javascript設(shè)計(jì)模式之解釋器模式詳解
- JavaScript設(shè)計(jì)模式之原型模式(Object.create與prototype)介紹
- 學(xué)習(xí)JavaScript設(shè)計(jì)模式(鏈?zhǔn)秸{(diào)用)
- JavaScript設(shè)計(jì)模式之構(gòu)造器模式(生成器模式)定義與用法實(shí)例分析
相關(guān)文章
JS判斷是否手機(jī)或pad訪問(wèn)實(shí)現(xiàn)方法
這篇文章主要介紹了JS判斷是否手機(jī)或pad訪問(wèn)實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-12-12
javascript實(shí)現(xiàn)十六進(jìn)制顏色值(HEX)和RGB格式相互轉(zhuǎn)換
這篇文章主要介紹了javascript實(shí)現(xiàn)十六進(jìn)制顏色值(HEX)和RGB格式之間的轉(zhuǎn)換,使用正則的方法實(shí)現(xiàn)RGB顏色轉(zhuǎn)換為16進(jìn)制,需要的朋友可以參考下2014-06-06
javascript組合使用構(gòu)造函數(shù)模式和原型模式實(shí)例
這篇文章主要介紹了javascript組合使用構(gòu)造函數(shù)模式和原型模式的方法,通過(guò)一個(gè)簡(jiǎn)單實(shí)例分析了javascript構(gòu)造函數(shù)模式與原型模式的使用方法,需要的朋友可以參考下2015-06-06
WebGL利用FBO完成立方體貼圖效果完整實(shí)例(附demo源碼下載)
這篇文章主要介紹了WebGL利用FBO完成立方體貼圖效果的方法,以完整實(shí)例形式分析了WebGL實(shí)現(xiàn)立方體貼圖的具體步驟與相關(guān)技巧,并附帶了demo源碼供讀者下載參考,需要的朋友可以參考下2016-01-01
js+css實(shí)現(xiàn)tab菜單切換效果的方法
這篇文章主要介紹了js+css實(shí)現(xiàn)tab菜單切換效果的方法,以實(shí)例形式完整講述了css與js的實(shí)現(xiàn)代碼,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01

