探討Proxy之前,得先來看看和Proxy一起搭配的Reflect
Reflect(反射)是ES6語法(我真的是寫了這麼久JS還是有好多不懂...)
顧名思義就是可以反射出自身狀態,JS其實已經有類似可以反射自己的方法可用,
譬如說:Object.keys
(可以查找自己的屬性)
他是一個內建的物件,有很多靜態語法(不用new 建構就可以直接使用)
Reflect常用的靜態方法有:
Reflect.apply()
Reflect.construct()
Reflect.get()
Reflect.set()
Reflect.defineProperty()
是不是跟Object很像?可以到MDN 這裡
看看Reflect和Object之間細微的差異
環遊非洲第06天:非洲101 之Q
猜猜非洲哪個國家率先在2021年推出數位貨幣?(很潮吧!先進國家都還沒有正式發行)
A.肯亞
B.南非
C.奈及利亞
D.埃及
譬如說我們昨天使用Object的defineProperty
,
如果我們將物件設置為靜態只能讀取的話,
當我們要賦值的時候,我們不會知道有沒有賦值成功,
但使用Reflect.defineProperty()
,因為返回的是布林值,我們就可以輕鬆知道結果。
const myObject = {}
let country = "Nigeria";
Object.defineProperty(myObject, "name", {
get() {
console.log("有人讀取了");
return country;
},
});
myObject.name = "South Africa" //沒反應
Reflect.set(myObject, 'name', 'South Africa') //得到false
語法:Reflect.defineProperty(target, propertyKey, attributes)
跟Object.defineProperty
用法差不多
返回:布林值說明有沒有設置成功
摘錄MDN案例
let myObject = {}
//可以做判斷式看有沒有設置成功,因為Reflec會返回boolean
if(Reflect.defineProperty(myObject, "name", {value: "South Africa"}))
{
console.log("Property created successfully!");
}else{
console.log("failed");
}
//Property created successfully!
console.log(myObject.name); //output: South Africa
語法:
Reflect.get(target, propertyKey, receiver)
Reflect.set(target, propertyKey, value, receiver)
返回屬性的值
這邊特別說明一下receiver
功能,如果有設定receiver,使用setter時會調用this
的值
這邊使用MDN的例子:
//1.
const target = {};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is {}; receiver is { a: 2 }
//2.
const target = { a: 1 };
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is { a: 1 }; receiver is { a: 2 }
//3.傳入Receiver,調用this指向Receiver本身
const target = {
set a(v) {
this.b = v;
}
};
const receiver = {};
Reflect.set(target, "a", 2, receiver); // true
// target is {}裡面有 a 的setter; receiver is { b: 2 }
Reciever搭配Proxy可以保持this指向的一致性
明天就來看看Proxy
搭配Refect
可以幫我們的物件監聽達到什麼效果!
看看Reflect和Object之間細微的差異
環遊非洲第06天:非洲101 之A
答案是C奈及利亞!
由國家的央行所推出的數位貨幣叫做:央行數位貨幣CBDC
CBDC潛在的效益有:改進跨境支付問題、開立使用方便利於經濟弱勢民眾、使用範圍廣...
雖然奈及利亞搶在2021年十月開啟了數位貨幣,但至今他幣值仍低、使用率也不高,
也被國際組織警告可能會有洗錢風險。(奈及利亞的網路詐騙世界有名)
台灣央行也積極在測試和討論數位貨幣的可能性,
奈及利亞的案例也可以當作參考呢。
How has Nigeria’s digital currency fared since its launch?
台灣央行數位貨幣進程整理|CBDC有何效益及風險?試驗進度到哪階段?