【发布时间】:2018-08-16 15:14:08
【问题描述】:
我想创建一个代理对象,拦截所有的属性检索和函数调用,并返回undefined。
实现前者是微不足道的:
const proxy = new Proxy({}, { get: () => undefined });
proxy.foo // undefined
事实上,我什至不需要代理,一个空对象 ({}) 也会这样做。但是,对函数调用执行相同操作会引发错误:
proxy.foo() // TypeError: proxy.foo is not a function
我可以让get 陷阱返回一个函数:
const proxy = new Proxy({}, { get: () => () => undefined });
proxy.foo() // undefined
proxy.foo // [Function]
但正如您所见,对于我原来的属性访问案例,它将返回一个函数而不是 undefined。有没有可能实现我想要的?
const proxy = ???;
proxy.foo; // undefined
proxy.foo(); // undefined
最终目标是将其用作“包罗万象”的存根进行测试。
更新: 感谢@Bergi 的回答。下面的代码完成了我想要的:
const proxy = new Proxy(new Function, {
get: (target, prop, receiver) => receiver,
});
console.log('proxy.foo', proxy.foo); // undefined
console.log('proxy.foo()', proxy.foo()); // undefined
console.log('proxy.foo.bar', proxy.foo.bar); // undefined
console.log('proxy.foo.bar()', proxy.foo.bar()); // undefined
【问题讨论】:
标签: javascript