亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文理解JavaScript裝飾器模式

 更新時間:2022年04月26日 11:01:09   作者:掘金安東尼  
這篇文章主要介紹了一文理解JavaScript裝飾器模式,文章基于JavaScript的相關資料展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下

裝飾器模式想必大家并不陌生:它允許向一個現(xiàn)有的對象添加新的功能,同時又不改變其結構,屬于結構型模式,它是作為現(xiàn)有的類的一個包裝。

這種模式創(chuàng)建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。

在 JS 中,裝飾器(Decorator)是ES7中的一個新語法,它可以對??類、方法、屬性??進行??修飾??,從而進行一些相關功能定制。它的寫法與Java的注解(Annotation)非常相似,但是功能還是有很大區(qū)別。

代碼示例:

不使用裝飾器:

const log = (srcFun) => {
if(typeof(srcFun) !== 'function') {
throw new Error(`the param must be a function`);
}
return (...arguments) => {
console.info(`${srcFun.name} invoke with ${arguments.join(',')}`);
srcFun(...arguments);
}
}
const plus = (a, b) => a + b;
const logPlus = log(plus);
logPlus(1,2);
// plus invoke with 1,2

使用裝飾器:

const log = (target, name, descriptor) => {
var oldValue = descriptor.value;
descriptor.value = function() {
console.log(`Calling ${name} with`, arguments);
return oldValue.apply(this, arguments);
};
return descriptor;
}
class Math {
@log // Decorator
plus(a, b) {
return a + b;
}
}
const math = new Math();
math.plus(1, 2);
// Calling plus with 1,2

從上面的代碼可以看出,如果有的時候我們并不需要關心函數(shù)的內(nèi)部實現(xiàn),僅僅是想調(diào)用它的話,裝飾器能夠帶來比較好的可讀性,使用起來也是非常的方便。

// readonly 裝飾器
import { readonly } from 'core-decorators';
class Fudao {
@readonly
title = 'A';
}
var fudao = new Fudao();
fudao.title = 'B'; // This will log error & doesn't work

JS中的裝飾器本質(zhì)也是一個函數(shù),利用的是JS中objectdescriptor;

裝飾類和被裝飾類可以獨立發(fā)展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態(tài)擴展一個實現(xiàn)類的功能。

到此這篇關于一文理解JavaScript裝飾器模式的文章就介紹到這了,更多相關JS裝飾器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS控制CSS樣式的方法

    JS控制CSS樣式的方法

    JS控制CSS樣式的方法...
    2007-10-10
  • js實現(xiàn)鼠標跟隨小游戲

    js實現(xiàn)鼠標跟隨小游戲

    這篇文章主要為大家詳細介紹了js實現(xiàn)鼠標跟隨小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JS實現(xiàn)div模塊的截圖并下載功能

    JS實現(xiàn)div模塊的截圖并下載功能

    這篇文章主要介紹了JS實現(xiàn)div模塊的截圖并下載功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-10-10
  • JavaScript indexOf的第二個參數(shù)用法

    JavaScript indexOf的第二個參數(shù)用法

    indexOf 是我們非常熟悉的一個方法,它可以用來獲取某一個元素在一個數(shù)組里的位置,我們一般就會使用 array.indexOf(element) 的方法來進行使用,但是,大家有沒有使用過 indexOf 的第二個參數(shù)呢?本文將給大家介紹一下indexOf的第二個參數(shù)用法,需要的朋友可以參考下
    2024-02-02
  • js清除瀏覽器緩存的幾種方法

    js清除瀏覽器緩存的幾種方法

    本文主要介紹了js清除瀏覽器緩存的幾種方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • JavaScript常用工具函數(shù)大全

    JavaScript常用工具函數(shù)大全

    這篇文章主要介紹了JavaScript常用工具函數(shù),匯總整理了各種JavaScript常用工具函數(shù),包括獲取、判斷、轉(zhuǎn)換、設置等相關功能函數(shù)的定義與使用方法,需要的朋友可以參考下
    2020-05-05
  • JS實現(xiàn)數(shù)組去重方法總結(六種方法)

    JS實現(xiàn)數(shù)組去重方法總結(六種方法)

    這篇文章給大家總結下JS實現(xiàn)數(shù)組去重方法(六種方法),面試中也經(jīng)常會遇到這個問題。文中給大家引申的還有合并數(shù)組并去重的方法,感興趣的朋友跟隨腳本之家小編一起學習吧
    2017-07-07
  • js中遞歸函數(shù)的使用介紹

    js中遞歸函數(shù)的使用介紹

    所謂的遞歸函數(shù)就是在函數(shù)體內(nèi)調(diào)用本函數(shù)。使用遞歸函數(shù)一定要注意,處理不當就會進入死循環(huán)。遞歸函數(shù)只有在特定的情況下使用 ,比如階乘問題
    2012-10-10
  • JS面向?qū)ο髮崿F(xiàn)飛機大戰(zhàn)

    JS面向?qū)ο髮崿F(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了JS面向?qū)ο髮崿F(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JS實現(xiàn)的通用表單驗證插件完整實例

    JS實現(xiàn)的通用表單驗證插件完整實例

    這篇文章主要介紹了JS實現(xiàn)的通用表單驗證插件,可針對常見的日期、密碼、姓名等進行驗證并給出提示信息,非常具有實用價值,需要的朋友可以參考下
    2015-08-08

最新評論