我想根据字符串计算对象的属性。 但是这些属性定义可能会引用另一个名为“actor”的对象。
如果这个 actor 存在(并非总是如此)我的代码有效,如果 actor 不存在(未定义)我希望评估返回 < strong>NaN 表示 actor 相关属性。
示例:
属性定义字符串可能如下所示:
"name = 'pant leg insurance';
cost = 10;
useful = actor.hasPants();
max = actor._legs;"
这些变量是在定义字符串运行之前定义的
eval(propertyString);
如果 actor 存在,一切都很好,但如果 actor 不存在,我想要每个 actor 依赖值(在这种情况下'有用'和'最大')返回NaN。
我已经研究了一下并找到了 Proxy 对象,但这只有在我想访问 actor 的直接属性时才有用,既没有函数也没有属性这是 actor 的属性 [...] 的属性。
var actor;
if (actor === undefined) {
actor = new Proxy({}, {
get: function(target, property) {
return NaN;
}
});
}
console.log(actor.anything);
console.log(actor.anyfunction());
console.log(actor.anything.anything);
console.log(actor.anything.anyfunction());
对于 actor 上的任何属性或函数调用,我如何实现此代码段返回 NaN?
最佳答案
不,代理无法做到这一点。当一个属性被访问时,你不知道它是直接在赋值中使用还是作为一个方法被调用,所以你无法决定是返回 NaN
还是一个函数。没有可调用的 NaN
值。
相反,您将需要处理您的属性定义字符串(无论如何您可能想要这样做,因为分配给未声明的变量是邪恶的)并测试每一行是否使用 actor
,以及它何时适用你的 if-not-exists-then-NaN
逻辑。
关于javascript - 如何将特定值返回给对象的任何属性或函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52093645/