摘要:修飾器是一個函數,用于修改類行為。結論以上只是一個很簡單的修飾器示例,你可以根據需要生產一些有意思的修飾器,讓編寫的代碼更優雅更干凈。
一般在JavaScript中為了讓部分代碼延遲執行,一想起的自然是 setTimeout,比如:
setTimeout(() => { // doing }, 0);
這種代碼或許你不知道寫過多少遍,但,我們在 setTimeout 中多數情況下會去調用另一個方法:
setTimeout(() => { this.fn(); }, 0);
你會發現,我們一直都在重復寫著 setTimeout,再套用一個匿名函數,最后才真正去編寫我們需要執行的方法。我越來越討厭這種寫法,老是寫著一些無關系要多余的代碼。
使用Angular的同學對 @Component 不陌生,里面大量的使用這種ES7才會有的“修飾器”。
修飾器是一個函數,用于修改類行為。
那, 應該怎么編寫一個更干凈的 setTimeout,比如,我希望這樣來編寫我的timeout:
@timeout(1000) fn() { // doing } this.fn();
對應的 timeout 修飾器代碼:
// timeout.ts export function timeout(milliseconds: number = 0) { return function(target, key, descriptor) { // value 值相當于上面示例中 `change` 方法。 var orgMethod = descriptor.value; descriptor.value = function(...args) { setTimeout(() => { orgMethod.apply(this, args); }, milliseconds); }; return descriptor; } }
target:實例對象,即 IndexComponent 實例化對象。
key:方法名稱,即 _fn_。
descriptor:對象描述,同Object.getOwnPropertyDescriptor()?。
怎么樣,這樣子寫的代碼是不是更酷?
修飾器目前只能在ES7才會有,但一些在Typescript、Babel等轉碼器已經被支持,特別是Angular2應用中更是給予非常重要的地位。而且應用范圍可以非常廣,比如類、類方法和屬性。
結論以上只是一個很簡單的修飾器示例,你可以根據需要生產一些有意思的修飾器,讓編寫的代碼更優雅、更干凈。完整示例。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81970.html
摘要:組件的外觀可以通用,但是位置卻不能。總結出現上述問題的愿意一個承擔的樣式太多。在使用等簡寫屬性時,注意其中關于位置和布局的樣式等布局和位置由單獨的布局類或單獨容器元素構成。降低現有類名沖突使用規則進行命名。 CSS模塊化規則 CSS模塊的設計原則: 可重用 可維護 可擴展 1 常見的問題 1.1 基于父組件直接修改樣式 .widget { background: yello...
摘要:還有安全特性,可以令模板源碼有強制的約束。并且業務邏輯和顯示邏輯分離,是的一個設計理念。是一個模板引擎,在應用程序中,當作層視圖層的組件來使用。不一定保證良好的程序設計或者達成顯示分離的目的,這還得需要開發者和模板設計師的努力。 一、 Smarty的由來 Smarty的主要設計理念是:干凈的分離顯示邏輯和程序代碼,在PHP為后端情況下,Smarty模板應用在前端,增強PHP的前后端交互...
閱讀 1809·2019-08-30 13:54
閱讀 2725·2019-08-29 17:27
閱讀 1109·2019-08-29 17:23
閱讀 3350·2019-08-29 15:20
閱讀 1225·2019-08-29 11:28
閱讀 1566·2019-08-26 10:39
閱讀 1315·2019-08-26 10:29
閱讀 639·2019-08-26 10:13