getter 或 setter 如何作用于 javascript 中的对象?
IE
在python中,如果我在一个对象上调用一个不存在的方法,我可以通过getter和setter拦截调用,然后从getter和setter返回。
我如何在 JavaScript 中执行类似的功能?
https://github.com/Flotype/now/blob/master/lib/client/now.js以某种方式实现了这个功能。我不明白这个把戏。谁能解释一下?
getter 或 setter 如何作用于 javascript 中的对象?
IE
在python中,如果我在一个对象上调用一个不存在的方法,我可以通过getter和setter拦截调用,然后从getter和setter返回。
我如何在 JavaScript 中执行类似的功能?
https://github.com/Flotype/now/blob/master/lib/client/now.js以某种方式实现了这个功能。我不明白这个把戏。谁能解释一下?
在 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"));
这不是最好的解决方案,但我认为没有更好的方法。
1)您可以使用非标准 mozilla __noSuchMethod__属性。
2) EcmaScript 6 Harmony 提出了 Proxy 对象。请参阅模拟 __noSuchMethod__