是否可以在Javascript / Coffeescript中的属性访问期间自动调用函数调用?

时间:2012-05-02 20:06:22

标签: javascript coffeescript

例如,这里是我的"你好"机:

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是一个善变的情妇,如果存在这种功能,我也不会感到惊讶。因此,如果有人知道我可以实现任何黑客来获得这种行为,我一定会很感激。

1 个答案:

答案 0 :(得分:2)

可悲的是,如果没有代理人,你就无法做到这一点:http://soft.vub.ac.be/~tvcutsem/proxies/

尚未得到广泛支持。甚至没有关闭。

如果你想要调用的属性是事先知道的,你可以使用Object.define_property声明getter方法,这种方法得到了更广泛的支持。但是如果不知道要提前调用的属性,就没有办法在没有代理的情况下拦截它们​​。