js ES6學習筆記 Reflect

2022-05-06 03:24:09 字數 1886 閱讀 4577

1、reflect物件與proxy物件一樣,也是 es6 為了操作物件而提供的新 api。reflect物件的設計目的有這樣幾個。

2、reflect.get方法查詢並返回target物件的name屬性,如果沒有該屬性,則返回undefined

3、reflect.set方法設定target物件的name屬性等於value。如果name屬性設定了賦值函式,則賦值函式的this繫結receiver

var myobject = ,

};var myreceiverobject = ;

reflect.set(myobject, 'bar', 1, myreceiverobject);

myobject.foo // 4

myreceiverobject.foo // 1

4、reflect.has方法對應name in obj裡面的in運算子。

5、reflect.deleteproperty方法等同於delete obj[name],用於刪除物件的屬性。

該方法返回乙個布林值。如果刪除成功,或者被刪除的屬性不存在,返回true;刪除失敗,被刪除的屬性依然存在,返回false

6、reflect.construct方法等同於new target(...args),這提供了一種不使用new,來呼叫建構函式的方法。

function greeting(name) 

// new 的寫法

const instance = new greeting('張三');

// reflect.construct 的寫法

const instance = reflect.construct(greeting, ['張三']);

7、reflect.defineproperty方法基本等同於object.defineproperty,用來為物件定義屬性。未來,後者會被逐漸廢除,請從現在開始就使用reflect.defineproperty代替它。

8、觀察者模式(observer mode)指的是函式自動觀察資料物件,一旦物件有變化,函式就會自動執行。

下面,使用 proxy 寫乙個觀察者模式的最簡單實現,即實現observableobserve這兩個函式。思路是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 ...