国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

西安網(wǎng)站制作公司排給公司做網(wǎng)站的公司

西安網(wǎng)站制作公司排,給公司做網(wǎng)站的公司,企業(yè)做網(wǎng)站的多嗎,旅游網(wǎng)站的制作TypeScript 混入(Mixins) 混入(Mixins)是面向?qū)ο缶幊讨械囊粋€比較重要的概念。本節(jié)將會通過一個實例逐步介紹混入是如何在 TypeScript 中使用的。 1. 解釋 在 TypeScript 中,可以根據(jù)不同的功能定義多個可復(fù)用的類,它們將作為 …

TypeScript 混入(Mixins)

混入(Mixins)是面向?qū)ο缶幊讨械囊粋€比較重要的概念。本節(jié)將會通過一個實例逐步介紹混入是如何在 TypeScript 中使用的。

1. 解釋

在 TypeScript 中,可以根據(jù)不同的功能定義多個可復(fù)用的類,它們將作為?mixins。因為?extends?只支持繼承一個父類,我們可以通過?implements?來連接多個?mixins,并且使用原型鏈連接子類的方法和父類的方法。

這就像組件拼合一樣,由一堆細(xì)粒度的?mixins?快速搭建起一個功能強大的類。

2. 簡單的對象混入

先來看一個基礎(chǔ)例子:

let target = {  a: 1,  b: 1 }
let source1 = {  a: 2,  c: 3 }
let source2 = {  b: 2,  d: 4 }Object.assign(target, source1, source2)console.log(target) // { a: 2, b: 2, c: 3, d: 4 }

解釋:?通過?Object.assign()?將?source1?與?source2?混入到?target?上,并且替換了?target?對象原有的屬性值。

3. TypeScript Mixins

先介紹一個前置知識:?Object.getOwnPropertyNames()?方法返回一個由指定對象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數(shù)組。

3.1 代碼演示

下面的代碼演示了如何在 TypeScript 中使用混入:

// Disposable Mixin
class Disposable {isDisposed!: booleandispose() {this.isDisposed = true}
}// Activatable Mixin
class Activatable {isActive!: boolean;activate() {this.isActive = true}deactivate() {this.isActive = false}
}class SmartObject{constructor() {setInterval(() => console.log(this.isActive + " : " + this.isDisposed), 500)}interact() {this.activate()}// DisposableisDisposed: boolean = falsedispose!: () => void// ActivatableisActive: boolean = falseactivate!: () => voiddeactivate!: () => void
}
applyMixins(SmartObject, [Disposable, Activatable])let smartObj = new SmartObject()
setTimeout(() => smartObj.interact(), 2000)function applyMixins(derivedCtor: any, baseCtors: any[]) {baseCtors.forEach(baseCtor => {Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {derivedCtor.prototype[name] = baseCtor.prototype[name]})})
}

3.2 逐步解析這個例子

代碼里首先定義了兩個類,它們將做為 mixins??梢钥吹矫總€類都只定義了一個特定的行為或功能。稍后我們使用它們來創(chuàng)建一個新類,同時具有這兩種功能。

// Disposable Mixin
class Disposable {isDisposed!: booleandispose() {this.isDisposed = true}
}// Activatable Mixin
class Activatable {isActive!: booleanactivate() {this.isActive = true}deactivate() {this.isActive = false}
}

下面使用?implements?連接多個父類,需要在子類里實現(xiàn)所有接口定義。

class SmartObject implements Disposable, Activatable {}

這么做是為將要 mixin 進來的屬性/方法創(chuàng)建出占位屬性。這告訴編譯器這些成員在運行時是可用的,這樣就能使用 mixin 帶來的便利,雖說需要提前定義一些占位屬性。

  // DisposableisDisposed: boolean = falsedispose!: () => void// ActivatableisActive: boolean = falseactivate!: () => voiddeactivate!: () => void

子類對外暴露一個封裝后的 public 方法,方法的具體實現(xiàn)可以借助混入的 mixins 類中的屬性/方法:

  interact() {this.activate()}

最后,把 mixins 混入定義的類,完成全部實現(xiàn)部分。

applyMixins(SmartObject, [Disposable, Activatable])

applyMixins()?方法借助?Object.getOwnPropertyNames()?遍歷 mixins 上的所有屬性,并復(fù)制到目標(biāo)上去,把之前的占位屬性替換成真正的實現(xiàn)代碼。

function applyMixins(derivedCtor: any, baseCtors: any[]) {baseCtors.forEach(baseCtor => {Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {derivedCtor.prototype[name] = baseCtor.prototype[name]})})
}

applyMixins()?這個工具函數(shù)可以封裝在項目中一個核心函數(shù)庫中。

4. 小結(jié)

混入這種思想在一些開源項目如?material、vue-class-component?中被廣泛使用,我們?nèi)粘9ぷ髦幸部梢愿鶕?jù)需求借鑒使用。

http://aloenet.com.cn/news/30257.html

相關(guān)文章:

  • 免費建站abc怎樣做好網(wǎng)絡(luò)營銷推廣
  • 做網(wǎng)站花都區(qū)百度推廣客戶端
  • 正規(guī)營銷型網(wǎng)站定制seo描述快速排名
  • 做新聞網(wǎng)站需要什么證件云巔seo
  • 網(wǎng)站建設(shè)定金合同淘寶推廣怎么做
  • 讓別人做網(wǎng)站多久開始注冊域名搜索引擎的優(yōu)化方法有哪些
  • 重慶做企業(yè)網(wǎng)站網(wǎng)站流量排行
  • 網(wǎng)站建設(shè)電話咨詢百度詞條搜索排行
  • 網(wǎng)站管理運營網(wǎng)站收錄什么意思
  • 上海網(wǎng)站制作上海網(wǎng)站制作重慶森林壁紙
  • 廣州手機網(wǎng)站建設(shè)黑馬程序員培訓(xùn)機構(gòu)官網(wǎng)
  • 怎么做有邀請碼的網(wǎng)站五年級上冊語文優(yōu)化設(shè)計答案
  • 電子商務(wù)網(wǎng)站開發(fā)代碼常德網(wǎng)站建設(shè)公司
  • 免費網(wǎng)站建設(shè)ydwzjsseo培訓(xùn)中心
  • 福建福州羅源建設(shè)局網(wǎng)站搜狗收錄提交入口
  • 做的美食視頻網(wǎng)站企業(yè)網(wǎng)站的推廣形式有
  • 做移門圖的 網(wǎng)站有哪些最近一周的重大熱點新聞
  • 什么軟件做高級網(wǎng)站交換友情鏈接推廣法
  • 外國網(wǎng)站學(xué)習(xí)做任務(wù) 升級互聯(lián)網(wǎng)推廣的方式
  • 聊城冠縣網(wǎng)站建設(shè)班級優(yōu)化大師怎么用
  • 做網(wǎng)站開發(fā)的集團品牌策劃案例
  • 網(wǎng)站建設(shè)證書網(wǎng)站建設(shè)流程步驟
  • 學(xué)校網(wǎng)站建設(shè)電話代刷網(wǎng)站推廣鏈接免費
  • 網(wǎng)絡(luò)運營和網(wǎng)絡(luò)營銷的區(qū)別合肥seo網(wǎng)絡(luò)優(yōu)化公司
  • 上海網(wǎng)站建設(shè)哪家品牌推廣軟文案例
  • 提供秦皇島網(wǎng)站建設(shè)江西省seo
  • 沒有網(wǎng)站可以做seo最新軍事頭條
  • 做網(wǎng)站公司職務(wù)免費找精準(zhǔn)客戶軟件
  • 北京網(wǎng)站推廣seo優(yōu)化頁面設(shè)計
  • 西安門戶網(wǎng)站建設(shè)公司哪家好軟文廣告經(jīng)典案例600