JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式實(shí)例分析
本文實(shí)例講述了JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式。分享給大家供大家參考,具體如下:
經(jīng)典的OOP語言中,構(gòu)造器(也叫構(gòu)造函數(shù))是一個(gè)用于初始化對象的特殊方法。在JS中,因?yàn)橐磺薪詫ο?,對象?gòu)造器經(jīng)常被提起。
對象構(gòu)造器用于建立制定類型(Class)的對象,可以接受參數(shù)用于初始化對象的屬性和方法。
對象建立
在JS中,有三個(gè)常用的方法用于建立對象:
//1, 推薦使用 var newObject = {}; //2, var newObject = Object.create( null ); //3, 不推薦 var newObject = new Object();
但是,這也只是建立了三個(gè)空對象, 并沒有任何屬性和方法。我們可以通過以下四種方法,為對象設(shè)立屬性和方法。
// ECMAScript 3 兼容的方式 // 1. 常規(guī)對象定義方式 //設(shè)置屬性 newObject.someKey = "Hello World"; //獲取屬性 var key = newObject.someKey; // 2. 方括號方式 // 設(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 }); //可以通過下面的函數(shù)簡化屬性設(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)造器建立對象。
通過使用【new】關(guān)鍵字,我們可以使一個(gè)函數(shù)的舉止類似于構(gòu)造器,從而建立自己的對象實(shí)例。
一個(gè)基礎(chǔ)的構(gòu)造器形式如下:
function Car( model, year, miles ) { //這里,this指向新建立的對象自己 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() );
這就是簡單的構(gòu)造器模式, 它有兩個(gè)主要問題,
第一,它很難繼承;第二,toString()被每一個(gè)對象實(shí)例定義一遍,作為函數(shù),它應(yīng)該被每一個(gè)Car類型的實(shí)例共享。
使用原型的構(gòu)造器
JS中有一個(gè)很好的特性:原型【Prototype】,
利用它,建立對象時(shí),所有構(gòu)造器原型中的屬性都可以被對象實(shí)例獲得。
這樣多個(gè)對象實(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對象實(shí)例共享。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家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)文章
Javascript類定義語法,私有成員、受保護(hù)成員、靜態(tài)成員等介紹
JS只是一門支持面向?qū)ο缶幊痰恼Z言,通過OO可以讓我們的代碼組織更加人性化??墒桥c傳統(tǒng)基與類的面向?qū)幊陶Z言不同它沒有類概念并且沒成員訪問修飾符。這多少會給我們編程工作會帶來一些束縛2011-12-12微信小程序?qū)崿F(xiàn)獲取用戶信息替換用戶名和頭像到首頁
本文詳細(xì)講解了微信小程序?qū)崿F(xiàn)獲取用戶信息替換用戶名和頭像到首頁的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Typescript tipe freshness 更嚴(yán)格對象字面量檢查
這篇文章主要為大家介紹了Typescript tipe freshness 更嚴(yán)格對象字面量檢查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10給應(yīng)用部分的js代碼設(shè)定一個(gè)統(tǒng)一的入口
javascript是種腳本語言,瀏覽器下載到哪兒就會執(zhí)行到哪兒,下面為大家介紹下,如何給應(yīng)用部分的js代碼一個(gè)統(tǒng)一的入口2014-06-06JS獲取瀏覽器地址欄的多個(gè)參數(shù)值的任意值實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了JS獲取瀏覽器地址欄的多個(gè)參數(shù)值的任意值,代碼簡單易懂,非常不錯,具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧2018-07-07