无法理解为什么我应该使用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