- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个代理对象来拦截所有属性检索和函数调用,并返回 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
最终目标是将其用作测试的“万能” stub 。
更新:感谢@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
最佳答案
不,这是不可能的。代理不会拦截方法 调用,它只能拦截对代理本身的调用(如在proxy()
中)。方法调用只是属性访问,然后是对属性值的函数调用。并且不可能有一个既是 undefined
又是函数的值。
要拥有一个真正包罗万象的测试 stub ,您的代理应该为任何访问或调用返回自己(或更好的另一个代理),以便您可以拥有任意链。
关于javascript - 如何创建一个包罗万象的对象代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51880346/
我有一个连接到后端和 DialogFlow/ApiAI 的聊天机器人。 我正在尝试在 Alexa 中设置一项技能,以便我可以捕捉到对我的技能所说的所有内容,然后将其转发到我的后端,以便我可以使用我现有
在具有一系列 ctors(其中大部分只有一个参数)的类中,我希望所有单参数 ctors 也被相应的赋值运算符镜像。 ctor包括但不限于copy-ctor和move-ctor。所以这应该满足五法则。
正如我之前提出的一个问题所示, Overload resolution, templates and inheritance ,将在需要派生到基础转换的重载之前选择模板重载。 但是,有没有一种方法可以
我想实现以下目标: /webapp-context/Page-1 -> Handled by my custom "ContentServlet" /webapp-cont
我没有使用任何模板引擎。我想将所有内容重定向到我的静态文件/public/desktop.html app.use(express.static(__dirname + '/public')); fu
我是一名优秀的程序员,十分优秀!