Python中的__getattr__在Javascript中

时间:2009-09-17 19:57:39

标签: javascript

有没有办法在Javascript中模拟Python的__getattr__方法?

我想拦截Javascript对象属性的“获取”和“设置”。

在Python中我可以写下以下内容:

class A:
    def __getattr__(self, key):
        return key

a = A()
print( a.b )  # Output: b

Javascript怎么样?

2 个答案:

答案 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