摘要:修飾器是一個(gè)函數(shù),用于修改類行為。結(jié)論以上只是一個(gè)很簡(jiǎn)單的修飾器示例,你可以根據(jù)需要生產(chǎn)一些有意思的修飾器,讓編寫的代碼更優(yōu)雅更干凈。
一般在JavaScript中為了讓部分代碼延遲執(zhí)行,一想起的自然是 setTimeout,比如:
setTimeout(() => { // doing }, 0);
這種代碼或許你不知道寫過(guò)多少遍,但,我們?cè)?setTimeout 中多數(shù)情況下會(huì)去調(diào)用另一個(gè)方法:
setTimeout(() => { this.fn(); }, 0);
你會(huì)發(fā)現(xiàn),我們一直都在重復(fù)寫著 setTimeout,再套用一個(gè)匿名函數(shù),最后才真正去編寫我們需要執(zhí)行的方法。我越來(lái)越討厭這種寫法,老是寫著一些無(wú)關(guān)系要多余的代碼。
使用Angular的同學(xué)對(duì) @Component 不陌生,里面大量的使用這種ES7才會(huì)有的“修飾器”。
修飾器是一個(gè)函數(shù),用于修改類行為。
那, 應(yīng)該怎么編寫一個(gè)更干凈的 setTimeout,比如,我希望這樣來(lái)編寫我的timeout:
@timeout(1000) fn() { // doing } this.fn();
對(duì)應(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í)例對(duì)象,即 IndexComponent 實(shí)例化對(duì)象。
key:方法名稱,即 _fn_。
descriptor:對(duì)象描述,同Object.getOwnPropertyDescriptor()?。
怎么樣,這樣子寫的代碼是不是更酷?
修飾器目前只能在ES7才會(huì)有,但一些在Typescript、Babel等轉(zhuǎn)碼器已經(jīng)被支持,特別是Angular2應(yīng)用中更是給予非常重要的地位。而且應(yīng)用范圍可以非常廣,比如類、類方法和屬性。
結(jié)論以上只是一個(gè)很簡(jiǎn)單的修飾器示例,你可以根據(jù)需要生產(chǎn)一些有意思的修飾器,讓編寫的代碼更優(yōu)雅、更干凈。完整示例。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81970.html
摘要:組件的外觀可以通用,但是位置卻不能??偨Y(jié)出現(xiàn)上述問(wèn)題的愿意一個(gè)承擔(dān)的樣式太多。在使用等簡(jiǎn)寫屬性時(shí),注意其中關(guān)于位置和布局的樣式等布局和位置由單獨(dú)的布局類或單獨(dú)容器元素構(gòu)成。降低現(xiàn)有類名沖突使用規(guī)則進(jìn)行命名。 CSS模塊化規(guī)則 CSS模塊的設(shè)計(jì)原則: 可重用 可維護(hù) 可擴(kuò)展 1 常見的問(wèn)題 1.1 基于父組件直接修改樣式 .widget { background: yello...
摘要:在生成的項(xiàng)目中,我們打開文件夾下組件,為便于演示,刪減了一部分內(nèi)容本文中的例子都將改造組件來(lái)演示語(yǔ)法一創(chuàng)建組件在中,有好幾種方式用來(lái)創(chuàng)建組件,后面會(huì)單獨(dú)寫一篇文章來(lái)介紹。表達(dá)式插值中也支持表達(dá)式插值用雙大括號(hào)將表達(dá)式括起來(lái)。 Vue 的官方文檔寫的非常棒(另一個(gè)我覺(jué)得中文文檔寫的很好地是 Ant-Design)。 這篇文章以使用 vue-cli 生成的項(xiàng)目為基礎(chǔ),以完整 demo 的...
摘要:反思在學(xué)習(xí)愛中,我要表明我對(duì)語(yǔ)法的新感受??s短修飾符長(zhǎng)度在中,修飾符類用兩個(gè)連接符表示。在中,它可能是這樣的在的指南中,有一個(gè)關(guān)于修飾符的部分。對(duì)于很多營(yíng)銷網(wǎng)站來(lái)說(shuō),甚至是完全多余的。我贊揚(yáng)對(duì)外公開它們的內(nèi)部規(guī)范。 反思BEM 在學(xué)習(xí)愛BEM中,我要表明我對(duì)BEM語(yǔ)法的新感受。 我很高興地報(bào)告說(shuō),經(jīng)過(guò)2年以上,我仍然對(duì)我的選擇感到滿意。 當(dāng)我們?cè)陧?xiàng)目中選擇代碼風(fēng)格時(shí),我們使用BEM和I...
摘要:還有安全特性,可以令模板源碼有強(qiáng)制的約束。并且業(yè)務(wù)邏輯和顯示邏輯分離,是的一個(gè)設(shè)計(jì)理念。是一個(gè)模板引擎,在應(yīng)用程序中,當(dāng)作層視圖層的組件來(lái)使用。不一定保證良好的程序設(shè)計(jì)或者達(dá)成顯示分離的目的,這還得需要開發(fā)者和模板設(shè)計(jì)師的努力。 一、 Smarty的由來(lái) Smarty的主要設(shè)計(jì)理念是:干凈的分離顯示邏輯和程序代碼,在PHP為后端情況下,Smarty模板應(yīng)用在前端,增強(qiáng)PHP的前后端交互...
摘要:還有安全特性,可以令模板源碼有強(qiáng)制的約束。并且業(yè)務(wù)邏輯和顯示邏輯分離,是的一個(gè)設(shè)計(jì)理念。是一個(gè)模板引擎,在應(yīng)用程序中,當(dāng)作層視圖層的組件來(lái)使用。不一定保證良好的程序設(shè)計(jì)或者達(dá)成顯示分離的目的,這還得需要開發(fā)者和模板設(shè)計(jì)師的努力。 一、 Smarty的由來(lái) Smarty的主要設(shè)計(jì)理念是:干凈的分離顯示邏輯和程序代碼,在PHP為后端情況下,Smarty模板應(yīng)用在前端,增強(qiáng)PHP的前后端交互...
閱讀 1823·2019-08-30 13:54
閱讀 2737·2019-08-29 17:27
閱讀 1125·2019-08-29 17:23
閱讀 3362·2019-08-29 15:20
閱讀 1237·2019-08-29 11:28
閱讀 1580·2019-08-26 10:39
閱讀 1327·2019-08-26 10:29
閱讀 653·2019-08-26 10:13