裝飾器是什麼?數組
解碼器是將另外一段代碼包裝在一個代碼中的簡單方法。瀏覽器
這個概念相似於你之前據說過的功能成分和高階成分。函數
這在許多狀況下都被使用過,也就是說,成都裝修公司簡單地將一個函數包裝到另外一個函數中:插件
前面的示例生成包裝的新函數,它執行與 DoSomething 相同的操做,但它們的不一樣之處在於在包裝函數以前和以後輸出一些語句。ip
如何使用 Javascript 裝飾器get
Javascript 中的裝飾器使用特殊的語法,使用 @做爲標識符,並將其放在修飾代碼以前。table
注:裝潢師仍在擬議階段,這意味着仍有改變的餘地。語法
您能夠在相同的代碼以前放置許多裝飾符,而後解釋器按順序執行程序
在上面的示例中,定義了一個類,使用三個裝飾器:兩個用於類自己,一個用於類的屬性:方法
-@log 能夠記錄全部訪問類
-@immutable 使類不可變 - 也許新實例調用 Object. 凍結
-@Time 記錄從執行到輸出惟一標記的方法
如今,雖然瀏覽器或 NODE 還不受支持。可是,若是您使用 Babel,您可使用轉換 - 裝飾器 - 遺留插件 - 使用裝飾器。
由於 Babel 5 支持處理裝飾器,因此在插件中使用 Legacy,但它可能與最終標準不一樣,所以使用了遺留一詞。
你爲何要用裝飾工?
函數組合在 Javascript 中已經成爲可能,可是在另外一個代碼(如類或類屬性)中使用是至關困難或不可能的。
不一樣類型的裝潢師
如今,裝飾器只支持類和類屬性,包括屬性、方法、獲取函數和設置函數
裝飾器將只在程序第一次運行時執行一次,而且修飾後的代碼將被返回的值替換
類屬性裝飾器
屬性裝飾器應用於類的單個成員 - 不管是屬性、方法、獲取函數仍是集合函數。
裝飾器函數調用三個參數:
- 目標 - 修改類
- 名稱類別成員的姓名
- 描述符 - 成員描述符。Object 將此參數傳遞給 Object.fineProperty
@readonly 是一個典型的例子:
函數只讀(target,name,descriptor){
可寫 = 假;
反轉描述符
12341234
前面的示例將成員描述符中的可寫設置爲 false。