1、proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種「元程式設計」(meta programming),即對程式語言進行程式設計。
2、proxy 可以理解成,在目標物件之前架設一層「攔截」,外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。proxy 這個詞的原意是**,用在這裡表示由它來「**」某些操作,可以譯為「**器」。
3、es6 原生提供 proxy 建構函式,用來生成 proxy 例項。
var proxy = new proxy(target, handler);
proxy 物件的所有用法,都是上面這種形式,不同的只是handler
引數的寫法。其中,new proxy()
表示生成乙個proxy
例項,target
引數表示所要攔截的目標物件,handler
引數也是乙個物件,用來定製攔截行為。
4、乙個技巧是將 proxy 物件,設定到object.proxy
屬性,從而可以在object
物件上呼叫。
var object = ;
5、get方法用於攔截某個屬性的讀取操作。下面是乙個攔截讀取操作的例子。
var person =;var proxy = new
proxy(person,
else
}});
proxy.name
//"張三"
proxy.age //
丟擲乙個錯誤
6、set方法用來攔截某個屬性的賦值操作。
let validator =if (value > 200)
}//對於age以外的屬性,直接儲存
obj[prop] =value;
}};let person = new
proxy({}, validator);
person.age = 100;
person.age
//100
person.age = 'young' //
報錯person.age = 300 //
報錯
var twice =};function
sum (left, right) ;
var proxy = new
proxy(sum, twice);
proxy(1, 2) //
6proxy.call(null, 5, 6) //
2230
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命令宣告的常量也是不提公升,同樣存在暫時性死...
js ES6學習筆記 修飾器
1 修飾器對類的行為的改變,是 編譯時發生的,而不是在執行時。這意味著,修飾器能在編譯階段執行 2 function testable target testable class mytestableclass console.log mytestableclass.istestable true ...