無法理解爲什麼我應該使用Reflect.get(obj, 'foo')
而不是obj['foo']
,或者爲什麼第一個是有用的,因爲我們可以使用good和good來做同樣的事情舊對象括號表示法。有人可以詳細說明嗎?JavaScript:Reflect.get()和obj ['foo']之間的區別
var obj = {foo: 'bar'};
obj['foo'];
Reflect.get(obj, 'foo');
無法理解爲什麼我應該使用Reflect.get(obj, 'foo')
而不是obj['foo']
,或者爲什麼第一個是有用的,因爲我們可以使用good和good來做同樣的事情舊對象括號表示法。有人可以詳細說明嗎?JavaScript:Reflect.get()和obj ['foo']之間的區別
var obj = {foo: 'bar'};
obj['foo'];
Reflect.get(obj, 'foo');
好了,迂腐回答你的問題是,他們是完全不同的:屬性訪問返回參考一個屬性,而Reflect.get
返回其值。
從實際的角度來看,沒有任何區別,因爲屬性引用總是在右側取消引用。
Reflect.get
的一個實際用法將與其第三個參數結合使用,該參數與Proxy
結合後可用於創建同一數據的不同「視圖」。
let numbersView = obj => new Proxy(obj, {
get(target, key, receiver) {
return receiver(target[key])
}
});
let decimal = x => String(x);
let english = x => {
if (x === 1) return 'one';
if (x === 2) return 'two';
};
let v = numbersView({
a: 1,
b: 2
});
console.log(Reflect.get(v, 'a', decimal))
console.log(Reflect.get(v, 'a', english))
這個例子是一個有點虛構的,但你有這個想法。
沒有區別。
從MDN文檔摘自:
靜態Reflect.get()方法的工作原理是從對象獲取屬性(目標[PROPERTYKEY])爲函數。 Reflect.get() | MDN
唯一的區別是Reflect.get()
將拋出一個TypeError
如果給定值不是object
。
obj[prop]
將拋出ReferenceError
如果obj
未定義,否則將只返回undefined
。
真的,我認爲它只存在給Reflect
一個完整的API,但應該沒有壞處,只使用obj[prop]
語法。
這不是事實。這裏有一個區別 - Reflect.get()' - _receiver_的第三個可選參數。例如:https://stackoverflow.com/a/39003741/1064570 – Artin
*「Reflect.get'方法允許你在一個對象上獲得一個屬性,就像屬性訪問器的語法是一個函數一樣。」* - 就是這麼多。這是同樣的事情,但作爲一個功能。可以在函數式編程中派上用場。 – deceze
@deceze,但你已經可以創建一個封閉的地方,你可能需要這樣的功能... – Jon
@Jon當然,但這是一個內置的! ...是的,這就是我得到的。 – deceze