0

例如,这是我的“Hello”机器:

hello_machine = new HelloMachine;

此时,如果有人试图访问 中的属性hello_machine,我希望发生以下情况。

hello_machine.fred;
hello_machine.greetings(); // output: Hi, fred!

hello_machine.george;
hello_machine.greetings(); // output: Hi, george!

无论他们试图访问什么属性,我都希望这种情况自动发生。我不想要任何硬编码的东西

这是我想调用的函数:

function set_buddy(name) {
  buddy = name;
}

问候语如下:

function greetings() {
  alert('Hi, ' + buddy);
}

显而易见的解决方案是不这样做。这是一种糟糕的做法,它改变了 Javascript 的基本行为方式。但是,我处于这种行为非常棒的位置。

我的直觉告诉我这是不可能的,而且互联网也无法说服我相信这个事实(我的脑袋告诉我,我问这个问题是个傻瓜)。但我知道 Javascript 是一个善变的情妇,如果这个功能存在,我也不会感到惊讶。因此,如果有人知道我可以实施任何黑客来获得这种行为,我一定会很感激。

4

1 回答 1

2

可悲的是,没有代理你不能这样做:http: //soft.vub.ac.be/~tvcutsem/proxies/

尚未得到广泛支持。差远了。

如果您希望调用的属性事先已知,您可以声明Object.define_property得到更广泛支持的 getter 方法。但是在不知道要提前调用的属性的情况下,没有代理就无法拦截它们。

于 2012-05-02T20:15:04.700 回答