亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript修飾器-讓代碼更干凈

luqiuwen / 1259人閱讀

摘要:修飾器是一個函數(shù),用于修改類行為。結(jié)論以上只是一個很簡單的修飾器示例,你可以根據(jù)需要生產(chǎn)一些有意思的修飾器,讓編寫的代碼更優(yōu)雅更干凈。

一般在JavaScript中為了讓部分代碼延遲執(zhí)行,一想起的自然是 setTimeout,比如:

setTimeout(() => {
  // doing
}, 0);

這種代碼或許你不知道寫過多少遍,但,我們在 setTimeout 中多數(shù)情況下會去調(diào)用另一個方法:

setTimeout(() => {
  this.fn();
}, 0);

你會發(fā)現(xiàn),我們一直都在重復(fù)寫著 setTimeout,再套用一個匿名函數(shù),最后才真正去編寫我們需要執(zhí)行的方法。我越來越討厭這種寫法,老是寫著一些無關(guān)系要多余的代碼。

使用Angular的同學(xué)對 @Component 不陌生,里面大量的使用這種ES7才會有的“修飾器”。

修飾器是一個函數(shù),用于修改類行為。

那, 應(yīng)該怎么編寫一個更干凈的 setTimeout,比如,我希望這樣來編寫我的timeout:

@timeout(1000)
fn() {
  // doing
}

this.fn();

對應(yīng)的 timeout 修飾器代碼:

// timeout.ts
export function timeout(milliseconds: number = 0) {
  return function(target, key, descriptor) {
    // value 值相當(dāng)于上面示例中 `change` 方法。
    var orgMethod = descriptor.value;
    descriptor.value = function(...args) {
      setTimeout(() => {
        orgMethod.apply(this, args);
      }, milliseconds);
    };
    return descriptor;
  }
}

target:實(shí)例對象,即 IndexComponent 實(shí)例化對象。
key:方法名稱,即 _fn_。
descriptor:對象描述,同Object.getOwnPropertyDescriptor()?。

怎么樣,這樣子寫的代碼是不是更酷?

修飾器目前只能在ES7才會有,但一些在Typescript、Babel等轉(zhuǎn)碼器已經(jīng)被支持,特別是Angular2應(yīng)用中更是給予非常重要的地位。而且應(yīng)用范圍可以非常廣,比如類、類方法和屬性。

結(jié)論

以上只是一個很簡單的修飾器示例,你可以根據(jù)需要生產(chǎn)一些有意思的修飾器,讓編寫的代碼更優(yōu)雅、更干凈。完整示例。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/81970.html

相關(guān)文章

  • CSS || 功能分類

    摘要:組件的外觀可以通用,但是位置卻不能??偨Y(jié)出現(xiàn)上述問題的愿意一個承擔(dān)的樣式太多。在使用等簡寫屬性時,注意其中關(guān)于位置和布局的樣式等布局和位置由單獨(dú)的布局類或單獨(dú)容器元素構(gòu)成。降低現(xiàn)有類名沖突使用規(guī)則進(jìn)行命名。 CSS模塊化規(guī)則 CSS模塊的設(shè)計(jì)原則: 可重用 可維護(hù) 可擴(kuò)展 1 常見的問題 1.1 基于父組件直接修改樣式 .widget { background: yello...

    xuhong 評論0 收藏0
  • Vue 基礎(chǔ)語法

    摘要:在生成的項(xiàng)目中,我們打開文件夾下組件,為便于演示,刪減了一部分內(nèi)容本文中的例子都將改造組件來演示語法一創(chuàng)建組件在中,有好幾種方式用來創(chuàng)建組件,后面會單獨(dú)寫一篇文章來介紹。表達(dá)式插值中也支持表達(dá)式插值用雙大括號將表達(dá)式括起來。 Vue 的官方文檔寫的非常棒(另一個我覺得中文文檔寫的很好地是 Ant-Design)。 這篇文章以使用 vue-cli 生成的項(xiàng)目為基礎(chǔ),以完整 demo 的...

    saucxs 評論0 收藏0
  • 關(guān)于BEM的反思

    摘要:反思在學(xué)習(xí)愛中,我要表明我對語法的新感受??s短修飾符長度在中,修飾符類用兩個連接符表示。在中,它可能是這樣的在的指南中,有一個關(guān)于修飾符的部分。對于很多營銷網(wǎng)站來說,甚至是完全多余的。我贊揚(yáng)對外公開它們的內(nèi)部規(guī)范。 反思BEM 在學(xué)習(xí)愛BEM中,我要表明我對BEM語法的新感受。 我很高興地報告說,經(jīng)過2年以上,我仍然對我的選擇感到滿意。 當(dāng)我們在項(xiàng)目中選擇代碼風(fēng)格時,我們使用BEM和I...

    xbynet 評論0 收藏0
  • Smarty(一)

    摘要:還有安全特性,可以令模板源碼有強(qiáng)制的約束。并且業(yè)務(wù)邏輯和顯示邏輯分離,是的一個設(shè)計(jì)理念。是一個模板引擎,在應(yīng)用程序中,當(dāng)作層視圖層的組件來使用。不一定保證良好的程序設(shè)計(jì)或者達(dá)成顯示分離的目的,這還得需要開發(fā)者和模板設(shè)計(jì)師的努力。 一、 Smarty的由來 Smarty的主要設(shè)計(jì)理念是:干凈的分離顯示邏輯和程序代碼,在PHP為后端情況下,Smarty模板應(yīng)用在前端,增強(qiáng)PHP的前后端交互...

    aboutU 評論0 收藏0
  • Smarty(一)

    摘要:還有安全特性,可以令模板源碼有強(qiáng)制的約束。并且業(yè)務(wù)邏輯和顯示邏輯分離,是的一個設(shè)計(jì)理念。是一個模板引擎,在應(yīng)用程序中,當(dāng)作層視圖層的組件來使用。不一定保證良好的程序設(shè)計(jì)或者達(dá)成顯示分離的目的,這還得需要開發(fā)者和模板設(shè)計(jì)師的努力。 一、 Smarty的由來 Smarty的主要設(shè)計(jì)理念是:干凈的分離顯示邏輯和程序代碼,在PHP為后端情況下,Smarty模板應(yīng)用在前端,增強(qiáng)PHP的前后端交互...

    chenjiang3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<