例如,这里是我的"你好"机:
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是一个善变的情妇,如果存在这种功能,我也不会感到惊讶。因此,如果有人知道我可以实现任何黑客来获得这种行为,我一定会很感激。
答案 0 :(得分:2)
可悲的是,如果没有代理人,你就无法做到这一点:http://soft.vub.ac.be/~tvcutsem/proxies/
尚未得到广泛支持。甚至没有关闭。
如果你想要调用的属性是事先知道的,你可以使用Object.define_property
声明getter方法,这种方法得到了更广泛的支持。但是如果不知道要提前调用的属性,就没有办法在没有代理的情况下拦截它们。