国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

JavaScript編程設(shè)計(jì)模式之構(gòu)造器模式實(shí)例分析

2019-11-19 15:05:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(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)造器用于建立制定類(lèi)型(Class)的對(duì)象,可以接受參數(shù)用于初始化對(duì)象的屬性和方法。

對(duì)象建立

在JS中,有三個(gè)常用的方法用于建立對(duì)象:

//1, 推薦使用var newObject = {};//2,var newObject = Object.create( null );//3, 不推薦var newObject = new Object();

但是,這也只是建立了三個(gè)空對(duì)象, 并沒(méi)有任何屬性和方法。我們可以通過(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è)置屬性O(shè)bject.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è)置屬性O(shè)bject.defineProperties(newObject,{ "someKey": { value: "Hello World", writable: true }, "anotherKey": { value: "Foo bar", writable: false }});// 3和4的獲取屬性方法同1,2.

基本的構(gòu)造器

我們知道, JS中沒(méi)有Class的概念,但它也支持用構(gòu)造器建立對(duì)象。

通過(guò)使用【new】關(guān)鍵字,我們可以使一個(gè)函數(shù)的舉止類(lèi)似于構(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類(lèi)型的實(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)容可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《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ì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永仁县| 焦作市| 江川县| 西安市| 奉贤区| 乾安县| 永州市| 古蔺县| 莲花县| 红原县| 和田县| 舞钢市| 齐齐哈尔市| 南溪县| 铜川市| 上杭县| 大田县| 义马市| 宜兴市| 玛沁县| 荣成市| 沙田区| 全南县| 吉水县| 和平县| 神木县| 西贡区| 同心县| 福建省| 宁阳县| 翼城县| 山东| 遵化市| 通河县| 黑龙江省| 建水县| 通州区| 冀州市| 云梦县| 天等县| 临泽县|