上下文
当我在模块化架构上工作时;弱";依赖关系。为此,我使用";桥接服务";处理所有模块间交互。
问题
我会使用如下桥接服务:
// in moduleA.js
bridgeService.moduleB.functionA();
但如果模块B不存在,则会引发错误cannot read property functionA of undefined
或bridgeService.moduleB.functionA is not a function
。
期望
我的意愿是它轻轻地失败。如果属性链中的任何属性丢失,这将记录一条警告,返回null
或false
并阻止调用所有其他属性
实际代码
这是我现在得到的:
// Proxy handler
const safeNotInstanciatedWarningProxy = {
get: function (object, prop) {
if (prop in object) return object[prop];
else {
console.warn(`${prop} not defined`);
return new Proxy({}, safeNotInstanciatedWarningProxy);
}
}
}
const bridgeService = new Proxy({}, safeNotInstanciatedWarningProxy)
这将永远不会引发第一个cannot read property functionA of undefined
错误。但是当调用最后一个函数时,我无法消除is not a function
错误。
有没有一种方法可以在javascript中实现我想要的东西?如果没有,最好的选择是什么?
感谢您的灯光
我无法摆脱这不是一个函数错误。
您可以将代理包装改为一个函数:
return new Proxy(() => {
console.warn("… and is not a function");
}, safeNotInstanciatedWarningProxy);
当然,一旦您的模块期望方法返回一些东西,这将失败。
下面是一个关于codePen 的例子