最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析JS抽象工廠模式

 更新時(shí)間:2017年12月14日 14:09:30   投稿:laozhang  
本篇文章主要給大家總結(jié)了一下作者在學(xué)習(xí)JS抽象工廠模式時(shí)的經(jīng)驗(yàn)和總結(jié),有興趣的朋友跟著學(xué)習(xí)下吧。

以下就是作者學(xué)習(xí)中遇到的問(wèn)題以及代碼實(shí)例,最后還給大家關(guān)于JS抽象工廠模式的學(xué)習(xí)做了總結(jié)。

抽象工廠模式(Abstract Factory)就是通過(guò)類(lèi)的抽象使得業(yè)務(wù)適用于一個(gè)產(chǎn)品類(lèi)簇的創(chuàng)建,而不負(fù)責(zé)某一類(lèi)產(chǎn)品的實(shí)例。

JS中是沒(méi)有直接的抽象類(lèi)的,abstract是個(gè)保留字,但是還沒(méi)有實(shí)現(xiàn),因此我們需要在類(lèi)的方法中拋出錯(cuò)誤來(lái)模擬抽象類(lèi),如果繼承的子類(lèi)中沒(méi)有覆寫(xiě)該方法而調(diào)用,就會(huì)拋出錯(cuò)誤。

const Car = function() { }
Car.prototype.getPrice = function() {return new Error('抽象方法不能調(diào)用')}

實(shí)現(xiàn)

面向?qū)ο蟮恼Z(yǔ)言里有抽象工廠模式,首先聲明一個(gè)抽象類(lèi)作為父類(lèi),以概括某一類(lèi)產(chǎn)品所需要的特征,繼承該父類(lèi)的子類(lèi)需要實(shí)現(xiàn)父類(lèi)中聲明的方法而實(shí)現(xiàn)父類(lèi)中所聲明的功能:

/**
* 實(shí)現(xiàn)subType類(lèi)對(duì)工廠類(lèi)中的superType類(lèi)型的抽象類(lèi)的繼承
* @param subType 要繼承的類(lèi)
* @param superType 工廠類(lèi)中的抽象類(lèi)type
*/
const VehicleFactory = function(subType, superType) {
 if (typeof VehicleFactory[superType] === 'function') {
  function F() {
   this.type = '車(chē)輛'
  } 
  F.prototype = new VehicleFactory[superType]()
  subType.constructor = subType
  subType.prototype = new F()        // 因?yàn)樽宇?lèi)subType不僅需要繼承superType對(duì)應(yīng)的類(lèi)的原型方法,還要繼承其對(duì)象屬性
 } else throw new Error('不存在該抽象類(lèi)')
}
VehicleFactory.Car = function() {
 this.type = 'car'
}
VehicleFactory.Car.prototype = {
 getPrice: function() {
  return new Error('抽象方法不可使用')
 },
 getSpeed: function() {
  return new Error('抽象方法不可使用')
 }
}
const BMW = function(price, speed) {
 this.price = price
 this.speed = speed
}
VehicleFactory(BMW, 'Car')    // 繼承Car抽象類(lèi)
BMW.prototype.getPrice = function() {    // 覆寫(xiě)getPrice方法
 console.log(`BWM price is ${this.price}`)
}
BMW.prototype.getSpeed = function() {
 console.log(`BWM speed is ${this.speed}`)
}
const baomai5 = new BMW(30, 99)
baomai5.getPrice()             // BWM price is 30
baomai5 instanceof VehicleFactory.Car    // true

總結(jié)

通過(guò)抽象工廠,就可以創(chuàng)建某個(gè)類(lèi)簇的產(chǎn)品,并且也可以通過(guò)instanceof來(lái)檢查產(chǎn)品的類(lèi)別,也具備該類(lèi)簇所必備的方法。

相關(guān)文章

  • js獲取height和width的方法說(shuō)明

    js獲取height和width的方法說(shuō)明

    js獲取height和width屬性的值在日常開(kāi)發(fā)中很常見(jiàn),于是本人搜集整理了一下,感興趣的朋友可以參考下
    2013-01-01
  • 超全面的javascript中變量命名規(guī)則

    超全面的javascript中變量命名規(guī)則

    javascript 有三大經(jīng)典的變量命名法:匈牙利命名法,駝峰式命名法和帕斯卡命名法。今天主要介紹下這三種命名方式。文中通過(guò)示例代碼介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • uniapp返回上一頁(yè)執(zhí)行上一頁(yè)方法解決方案

    uniapp返回上一頁(yè)執(zhí)行上一頁(yè)方法解決方案

    這篇文章主要給大家介紹了關(guān)于uniapp返回上一頁(yè)執(zhí)行上一頁(yè)方法解決方案,在UniApp中可以通過(guò)uni.navigateBack()方法返回上一個(gè)頁(yè)面,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • JavaScript的面向?qū)ο缶幊袒A(chǔ)

    JavaScript的面向?qū)ο缶幊袒A(chǔ)

    這篇文章主要介紹了JavaScript的面向?qū)ο缶幊袒A(chǔ),是JavaScript入門(mén)學(xué)習(xí)中的重要知識(shí)概念,需要的朋友可以參考下
    2015-08-08
  • 有關(guān)javascript的性能優(yōu)化 (repaint和reflow)

    有關(guān)javascript的性能優(yōu)化 (repaint和reflow)

    本篇文章,小編將為大家介紹,有關(guān)javascript的性能優(yōu)化(repaint和reflow),有需要的朋友可以參考一下
    2013-04-04
  • 詳解JavaScript中|單豎杠運(yùn)算符的使用方法

    詳解JavaScript中|單豎杠運(yùn)算符的使用方法

    JavaScript中|單豎杠通常被用來(lái)對(duì)浮點(diǎn)型數(shù)字進(jìn)行取證,這里同時(shí)也介紹了單豎杠的運(yùn)算規(guī)則,下面我們就來(lái)詳解JavaScript中|單豎杠的使用方法
    2016-05-05
  • js作用域及作用域鏈概念理解及使用

    js作用域及作用域鏈概念理解及使用

    作用域鏈?zhǔn)怯捎趈s的變量都是對(duì)象的屬性,而該對(duì)象可能又是其它對(duì)象的屬性,而所有的對(duì)象都是window對(duì)象的屬性,所以這些對(duì)象的關(guān)系可以看作是一條鏈
    2013-04-04
  • 徹底搞懂?javascript的Promise

    徹底搞懂?javascript的Promise

    這篇文章主要為大家詳細(xì)介紹了javascript的Promise,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 簡(jiǎn)單實(shí)現(xiàn)異步編程promise模式

    簡(jiǎn)單實(shí)現(xiàn)異步編程promise模式

    本篇文章主要介紹了異步編程promise模式的簡(jiǎn)單實(shí)現(xiàn),并對(duì)每一步進(jìn)行了分析,需要的朋友可以參考下
    2015-07-07
  • Javascript中arguments和arguments.callee的區(qū)別淺析

    Javascript中arguments和arguments.callee的區(qū)別淺析

    這篇文章主要介紹了Javascript中arguments和arguments.callee的區(qū)別淺析,本文用一個(gè)實(shí)例來(lái)理解它們的區(qū)別,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

全椒县| 新津县| 静乐县| 古丈县| 勐海县| 鄯善县| 张家口市| 定安县| 铅山县| 永德县| 普兰县| 友谊县| 张家川| 涪陵区| 明溪县| 如东县| 抚宁县| 双峰县| 车险| 湘潭市| 英超| 三原县| 象山县| 教育| 咸宁市| 洛浦县| 丰镇市| 老河口市| 阿坝| 浙江省| 翁源县| 车致| 闻喜县| 桐乡市| 宝山区| 庆云县| 乐昌市| 丰顺县| 青川县| 合川市| 邹城市|