摘要:修飾器是一個函數(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
摘要:組件的外觀可以通用,但是位置卻不能??偨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...
摘要:在生成的項(xiàng)目中,我們打開文件夾下組件,為便于演示,刪減了一部分內(nèi)容本文中的例子都將改造組件來演示語法一創(chuàng)建組件在中,有好幾種方式用來創(chuàng)建組件,后面會單獨(dú)寫一篇文章來介紹。表達(dá)式插值中也支持表達(dá)式插值用雙大括號將表達(dá)式括起來。 Vue 的官方文檔寫的非常棒(另一個我覺得中文文檔寫的很好地是 Ant-Design)。 這篇文章以使用 vue-cli 生成的項(xiàng)目為基礎(chǔ),以完整 demo 的...
摘要:反思在學(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...
摘要:還有安全特性,可以令模板源碼有強(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的前后端交互...
摘要:還有安全特性,可以令模板源碼有強(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的前后端交互...
閱讀 1861·2019-08-30 13:54
閱讀 2772·2019-08-29 17:27
閱讀 1172·2019-08-29 17:23
閱讀 3397·2019-08-29 15:20
閱讀 1288·2019-08-29 11:28
閱讀 1630·2019-08-26 10:39
閱讀 1399·2019-08-26 10:29
閱讀 710·2019-08-26 10:13