【发布时间】:2017-10-10 22:00:16
【问题描述】:
当Proxy 捕获一个分配并且不确认它时,在严格模式的情况下TypeError 被抛出。但我会误用代理,需要ReferenceError。
如何在第二次通话中获得ReferenceError?
var code = `
try {
a = 1;
console.log("Ok");
} catch (e) {
console.log(e.name);
}
`;
var p = new Proxy({a:undefined}, {set(){}});
with (p) (function () { eval(code); })(); // Ok
with (p) (function () { 'use strict'; eval(code); })(); // TypeError
(function () { 'use strict'; eval(code); })(); // ReferenceError
【问题讨论】:
-
throw new ReferenceError(…)工作吗? -
“不确认”是什么意思?
-
@Ryan,在什么地方?只有当调用者处于严格模式时我才需要一个错误,否则什么都不会发生。并且
code不应更改。 -
@Bergi,
{set(){}}- 如果在严格模式下(仅)从代码中调用 setter,则会导致错误,并且通过确认我的意思是{set(){return true}}- 分配被认为是成功的并且不会发生错误。跨度> -
@Qwertiy:检测调用者是否处于严格模式似乎是不可能的。这个是干什么的?一个噱头图书馆?
标签: javascript ecmascript-6 es6-proxy