我发现跨浏览器的显著错误似乎不太可能。但根据Reflect.set
文档,第四个参数应该用作thisArg(例如,如果设置变量是一个setter)。第一个参数是要设置值的对象,然而无论我提供什么对象作为第四个参数,值都会被设置在那个对象上,而不是目标对象。
var target = new Object;
var thisArg = new Object;
Reflect.set(target, 'variable', 52, thisArg);
target.variable == undefined
thisArg.variable == 52
有什么解释吗?
[[SET]]( P, V, Receiver )
- 步骤 4d + 5f。 - Andreas[[Get]]
的工作方式不同。如果属性是getter,则仅在此处使用接收器:https://www.ecma-international.org/ecma-262/6.0/#sec-ordinary-object-internal-methods-and-internal-slots-get-p-receiver - Felix Kling