1、修飾器對類的行為的改變,是**編譯時發生的,而不是在執行時。這意味著,修飾器能在編譯階段執行**。
2、
functiontestable(target)
@testable
class mytestableclass {}
console.log(mytestableclass.istestable)
//true
上面**中,@testable
就是乙個修飾器。它修改了mytestableclass
這個類的行為,為它加上了靜態屬性istestable
。
3、修飾器不僅可以修飾類,還可以修飾類的屬性。
class person $` }}
上面**中,修飾器readonly
用來修飾「類」的name
方法。
此時,修飾器函式一共可以接受三個引數,第乙個引數是所要修飾的目標物件,第二個引數是所要修飾的屬性名,第三個引數是該屬性的描述物件。
functionreadonly(target, name, descriptor);
descriptor.writable = false;
return
descriptor;
}readonly(person.prototype, 'name', descriptor);
//類似於
object.defineproperty(person.prototype, 'name', descriptor);
4、修飾器只能用於類和類的方法,不能用於函式,因為存在函式提公升。類是不會提公升的,所以就沒有這方面的問題。
js ES6學習筆記 Proxy
1 proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種 元程式設計 meta programming 即對程式語言進行程式設計。2 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾...
js ES6學習筆記 Reflect
1 reflect物件與proxy物件一樣,也是 es6 為了操作物件而提供的新 api。reflect物件的設計目的有這樣幾個。2 reflect.get方法查詢並返回target物件的name屬性,如果沒有該屬性,則返回undefined。3 reflect.set方法設定target物件的na...
js ES6學習筆記 const命令
1 const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。2 const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。3 const的作用域與let命令相同 只在宣告所在的塊級作用域內有效。4 const命令宣告的常量也是不提公升,同樣存在暫時性死...