javascript - 《ES6標準入門》中關於修飾器的疑問
仅有的幸福
仅有的幸福 2017-06-30 09:58:40
0
2
826

修飾器對類別的行為的改變,是程式碼編譯時發生的,而不是在執行時。這意味著,修飾器能在編譯階段運行程式碼。也就是說,修飾器本質就是編譯時執行的函數。

有以下幾個問題:

  1. 上面引用說到:修飾器對類別的行為的改變,是程式碼編譯時發生的,而不是在執行時間,這句話中的編譯時運行時發生分別是什麼意思?

  2. 修飾器本質就是編譯時執行的函數,這裡的執行和問題一中的發生是一個意思嗎?

  3. 修飾器一般用在哪些地方?

書上的解釋看的比較模糊,麻煩大神細細解說,非常感謝!

仅有的幸福
仅有的幸福

全部回覆(2)
我想大声告诉你

編譯時,可以大致理解為,在程式碼開始運作之前,JS引擎將程式碼轉換成機器可以運行的操作的時候。也就是說,這個過程無法在運行時候加以乾涉的,因為它在開始運行之前就已經完成了。

而運行時,則是指你程式碼編譯以後機器可以運行的操作開始運行時,也就是你寫的那些東西,從機器操作變成了你能實際在電腦上看到的東西的時候。

至於發生,並沒有特殊意義,就是指這些改變是在JS引擎將程式碼轉換為機器操作過程中完成的。

執行和發生,大致可以認為是因和果的關係。改變,一般搭配的動詞是“發生”,函數,一般搭配的字是“執行”。發生強調的是前後狀態的對比,也就是說,因為發生了某件事,導致之後和之前不同了。而執行則著重過程,執行一個操作,也就是將操作裡每個步驟都做一遍,並沒有刻意去注重前後是否有不同。所以,這邊應該是修飾器=編譯時執行的函數,這個函數執行之後導致的結果是類別行為有所改變。

既然,上面說了,是對類行為的改變,所以修飾器一般用在類別聲明時候對類別裡面方法和屬性的修飾。

为情所困

說穿了,程式碼大體分編譯階段和執行階段,你可以理解成編譯階段把程式碼解析成一個樹,到了運行階段時,按照編譯形成的樹進行運行。你可以在github上搜尋一下core-decorators.js,這個函式庫就是一個修飾器的實例。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板