obj['foo']
の代わりにReflect.get(obj, 'foo')
を使用しなければならない理由がわからないのはなぜですか?古いオブジェクト括弧表記。誰かが詳しく説明できますか?JavaScript:Reflect.get()とobj ['foo']の違い
var obj = {foo: 'bar'};
obj['foo'];
Reflect.get(obj, 'foo');
obj['foo']
の代わりにReflect.get(obj, 'foo')
を使用しなければならない理由がわからないのはなぜですか?古いオブジェクト括弧表記。誰かが詳しく説明できますか?JavaScript:Reflect.get()とobj ['foo']の違い
var obj = {foo: 'bar'};
obj['foo'];
Reflect.get(obj, 'foo');
さて、あなたの質問に杓子定規答えは、彼らが完全に異なっていることを次のようになります。Reflect.get
はその値を返しながら、プロパティアクセサは、プロパティへ参照を返します。
プロパティ参照は常に右側で逆参照されるため、実際には違いはありません。
Reflect.get
の実際の使用法の1つは、同じデータの異なる「ビュー」を作成するためにProxy
と組み合わせて使用する3番目の引数になります。
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
唯一の違いは、与えられた値がobject
でない場合Reflect.get()
はTypeError
がスローされますです。
obj[prop]
はobj
が定義されていないReferenceError
場合スローされますが、それ以外はただundefined
を返します。
実際、Reflect
には完全なAPIを提供することしか存在しませんが、obj[prop]
構文を使用することには欠点はありません。
それは当てはまりません。差異 - 'Reflect.get()' - _receiver_の3番目のオプションパラメータがあります。例:https://stackoverflow.com/a/39003741/1064570 – Artin
* "Reflect.get'メソッドは、オブジェクトのプロパティを取得することを可能にします。これは、関数としてのアクセサアクセサの構文と似ています。それは同じことですが、機能としてです。関数型プログラミングに便利です。 – deceze
@decezeしかし、このような機能が必要な場所であればどこでもクロージャを作成することができます... – Jon
@Jon確かに、これは内蔵されています! ...ああ、それだけでも私が得たものです。 – deceze