1、reflect
物件與proxy
物件一樣,也是 es6 為了操作物件而提供的新 api。reflect
物件的設計目的有這樣幾個。
2、reflect.get
方法查詢並返回target
物件的name
屬性,如果沒有該屬性,則返回undefined
。
3、reflect.set
方法設定target
物件的name
屬性等於value
。如果name
屬性設定了賦值函式,則賦值函式的this
繫結receiver
。
var myobject = ,4、};var myreceiverobject = ;
reflect.set(myobject, 'bar', 1, myreceiverobject);
myobject.foo // 4
myreceiverobject.foo // 1
reflect.has
方法對應name in obj
裡面的in
運算子。
5、reflect.deleteproperty
方法等同於delete obj[name]
,用於刪除物件的屬性。
該方法返回乙個布林值。如果刪除成功,或者被刪除的屬性不存在,返回true
;刪除失敗,被刪除的屬性依然存在,返回false
。
6、reflect.construct
方法等同於new target(...args)
,這提供了一種不使用new
,來呼叫建構函式的方法。
function greeting(name)7、// new 的寫法
const instance = new greeting('張三');
// reflect.construct 的寫法
const instance = reflect.construct(greeting, ['張三']);
reflect.defineproperty
方法基本等同於object.defineproperty
,用來為物件定義屬性。未來,後者會被逐漸廢除,請從現在開始就使用reflect.defineproperty
代替它。
8、觀察者模式(observer mode)指的是函式自動觀察資料物件,一旦物件有變化,函式就會自動執行。
下面,使用 proxy 寫乙個觀察者模式的最簡單實現,即實現observable
和observe
這兩個函式。思路是observable
函式返回乙個原始物件的 proxy **,攔截賦值操作,觸發充當觀察者的各個函式。
const queuedobservers = new set();上面**中,先定義了乙個const observe = fn => queuedobservers.add(fn);
const observable = obj => new proxy(obj, );
function set(target, key, value, receiver)
set
集合,所有觀察者函式都放進這個集合。然後,observable
函式返回原始物件的**,攔截賦值操作。攔截函式set
之中,會自動執行所有觀察者。 js ES6學習筆記 Proxy
1 proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種 元程式設計 meta programming 即對程式語言進行程式設計。2 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾...
js ES6學習筆記 const命令
1 const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。2 const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。3 const的作用域與let命令相同 只在宣告所在的塊級作用域內有效。4 const命令宣告的常量也是不提公升,同樣存在暫時性死...
js ES6學習筆記 修飾器
1 修飾器對類的行為的改變,是 編譯時發生的,而不是在執行時。這意味著,修飾器能在編譯階段執行 2 function testable target testable class mytestableclass console.log mytestableclass.istestable true ...