JavaScript拥有Object.defineProperty
的getter。所以我可以通过
random
的属性window
上定义一个getter
Object.defineProperty(window, 'random', {
get: function () {
return Math.random();
}
});
random // Evaluates to a random number
是否可以为给定对象定义“通用getter”,而不管对象属性如何?我希望做一些像
这样的事情Object.universalGetter(window, function (propertyName) {
console.log('Accessing property', propertyName, 'of window.');
});
window.Function // Prints "Accessing property Function of window."
我可以在JavaScript中使用“通用getter”吗?
答案 0 :(得分:11)
不幸的是:不,没有。
在基于Gecko 18的浏览器中引入了一些称为Proxy对象的东西
这将允许你做这样的事情
(function (original, Window) {
var handler = {
get: function (target, propertyName) {
console.log('Accessing property', propertyName, 'of window.');
return target[propertyName];
}
};
Window = new Proxy(original, handler);
console.log(Window.setTimeout);
// "Accessing property"
// "setTimeout"
// "of window."
// function setTimeout() {
// [native code]
// }
})(window);
但这不标准且仍然非常不稳定
Btw我原本以为你可以直接在{II}中使用window
作为局部变量,但似乎你不能只记录undefined(想知道为什么)所以我把“W”大写了
注意:您应该在Firefox中访问它
答案 1 :(得分:5)
没有
在ECMAScript第5版中不可能这样做没有为此操作做准备。虽然没有明确说明,但可以看出[GetProperty]没有任何规定对不存在的财产的规定。
ECMAScript 中的getter / setter需要现有属性,并且没有相应的Ruby method_missing
或Python __getattribute__
。