如何为对象的任何属性或函数调用返回特定值?

时间:2018-08-30 09:30:42

标签: javascript

我想基于字符串来计算对象的属性。 但是这些属性定义可能引用另一个称为“ actor ”的对象。

如果此 actor 存在(并非总是如此),我的代码可以工作,如果 actor 不存在(未定义),我希望求值返回< strong> NaN 用于依赖于角色的属性。

示例:

属性定义字符串可能类似于:

"name = 'pant leg insurance';
cost = 10;
useful = actor.hasPants();
max = actor._legs;"

这些变量是在定义字符串运行之前定义的

eval(propertyString);

如果 actor 存在,那么一切都很好,但是如果 actor 不存在,我希望每个与 actor 相关的值(在这种情况下, '有用'和' max ')返回 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

1 个答案:

答案 0 :(得分:1)

不,代理无法实现这一目标。访问属性时,您不知道是将其直接用于赋值还是将其作为方法调用,因此无法确定是返回NaN还是函数。没有可调用的NaN值。

相反,您将需要处理属性定义字符串(无论如何,您都可能想要这样做,因为分配未声明的变量是邪恶的)并测试每行actor的用法,以及何时使用if-然后不存在NaN逻辑。