在这段代码中
function report(message) {
console.log(message);
}
function makeLoggable(target) {
return new Proxy(target, {
get(target, property) {
report(`Reading ${property}`);
const param = target;
return param[property];
},
set(target, property, value) {
report(`Writing value ${value} to ${property}`);
const param = target;
return param[property] = value;
},
});
}
let ninja = { name: 'Jack' };
ninja = makeLoggable(ninja);
console.assert(ninja.name === 'Jack', 'Our ninja Jack');
ninja.status = '';
我有两个问题:
- 如果我在最后一行将属性状态设置为 0 或“”(空字符串),为什么会出现错误?
未捕获的类型错误:代理上的“设置”:属性“状态”的陷阱返回错误(…)
- 在规范中它说我应该返回一个布尔值。但就我而言,在 set() 方法中,我不返回任何布尔值。在那种情况下,为什么这段代码有效?