0

getter 或 setter 如何作用于 javascript 中的对象?

IE

在python中,如果我在一个对象上调用一个不存在的方法,我可以通过getter和setter拦截调用,然后从getter和setter返回。

我如何在 JavaScript 中执行类似的功能?

https://github.com/Flotype/now/blob/master/lib/client/now.js以某种方式实现了这个功能。我不明白这个把戏。谁能解释一下?

4

2 回答 2

1

在 Javascript 中创建相同的功能几乎是不可能的。我最好的猜测是这样的:

var getter = function (propName) { 
    if (propName in this) { 
        return this[propName]; 
    } else { 
        return "no prop"; 
    } 
};

您可以使用以下语法在您喜欢的任何对象上调用此函数:

a = { "test": "yes" };
b = {}
console.log(getter.call(a, "test"));
console.log(getter.call(b, "test"));

这不是最好的解决方案,但我认为没有更好的方法。

于 2012-08-30T14:46:30.057 回答
1

1)您可以使用非标准 mozilla __noSuchMethod__属性。

2) EcmaScript 6 Harmony 提出了 Proxy 对象。请参阅模拟 __noSuchMethod__

于 2012-08-30T15:39:39.447 回答