有没有办法在Javascript中模拟Python的__getattr__
方法?
我想拦截Javascript对象属性的“获取”和“设置”。
在Python中我可以写下以下内容:
class A:
def __getattr__(self, key):
return key
a = A()
print( a.b ) # Output: b
Javascript怎么样?
答案 0 :(得分:9)
没有。 Firefox中最接近的是__defineGetter__
,它定义了在读取指定属性时调用的函数回调:
navigator.__defineGetter__('userAgent', function(){
return 'foo' // customized user agent
});
navigator.userAgent; // 'foo'
它与__getattr__
的不同之处在于它被称为已知属性,而不是未知属性的通用查找。
答案 1 :(得分:3)
不符合标准ECMAScript-262第3版
另一方面,即将到来的第5版(当前草案)在对象初始化器中引入了访问器。例如:
var o = {
a:7,
get b() { return this.a + 1; },
set c(x) { this.a = x / 2; }
};
类似的语法已经supported by Javascript 1.8.1(当然是非标准的扩展名)。
请注意,目前没有“已完成”的ES5实施(尽管some are in progress)