【发布时间】:2021-10-28 04:41:58
【问题描述】:
两个测试用例都通过了。我根本不明白这种行为。似乎 JavaScript 代理无法捕获 getter 函数中的属性。
test('JS Proxy normal method', () => {
class Store {
hidden = false;
visible() {
return !this.hidden;
}
}
const accessList: PropertyKey[] = [];
const proxy = new Proxy<Store>(new Store(), {
get: (target: any, propertyKey: PropertyKey) => {
accessList.push(propertyKey);
return Reflect.get(target, propertyKey);
},
});
expect(proxy.visible()).toBe(true);
expect(accessList).toEqual(['visible', 'hidden']);
});
test('JS Proxy getter method', () => {
class Store {
hidden = false;
get visible() {
return !this.hidden;
}
}
const accessList: PropertyKey[] = [];
const proxy = new Proxy<Store>(new Store(), {
get: (target: any, propertyKey: PropertyKey) => {
accessList.push(propertyKey);
return Reflect.get(target, propertyKey);
},
});
expect(proxy.visible).toBe(true);
expect(accessList).toEqual(['visible']);
});
【问题讨论】:
-
哪些期望失败了?如何失败?
-
顺便说一句,您的
get陷阱未将receiver参数转发到Reflect.get -
@Bergi 我希望两者在
get陷阱方面具有相同的行为。谢谢你的评论。您可以改为发布答案。 -
“顺便说一句,你的 get 陷阱没有将接收器参数转发给 Reflect.get”,这是根本原因!请发布答案,我会接受。非常感谢!
标签: javascript typescript getter es6-proxy