溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-10-18 18:36:44 來源:腳本之家 閱讀:112 作者:騎車撿瑪瑙 欄目:web開發(fā)

本文實例講述了JavaScript編程設(shè)計模式之構(gòu)造器模式。分享給大家供大家參考,具體如下:

經(jīng)典的OOP語言中,構(gòu)造器(也叫構(gòu)造函數(shù))是一個用于初始化對象的特殊方法。在JS中,因為一切皆對象,對象構(gòu)造器經(jīng)常被提起。

對象構(gòu)造器用于建立制定類型(Class)的對象,可以接受參數(shù)用于初始化對象的屬性和方法。

對象建立

在JS中,有三個常用的方法用于建立對象:

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

但是,這也只是建立了三個空對象, 并沒有任何屬性和方法。我們可以通過以下四種方法,為對象設(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)鍵字,我們可以使一個函數(shù)的舉止類似于構(gòu)造器,從而建立自己的對象實例。

一個基礎(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";
  };
}
//用法
// 建立兩個car實例
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)造器模式, 它有兩個主要問題,

第一,它很難繼承;第二,toString()被每一個對象實例定義一遍,作為函數(shù),它應(yīng)該被每一個Car類型的實例共享。

使用原型的構(gòu)造器

JS中有一個很好的特性:原型【Prototype】,

利用它,建立對象時,所有構(gòu)造器原型中的屬性都可以被對象實例獲得。

這樣多個對象實例就可以共享同一個原型。

我們改善前面的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()方法被多個Car對象實例共享。

更多關(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é)運算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI