【问题标题】:Python's __getattr__ in Javascript [duplicate]Javascript中的Python __getattr__ [重复]
【发布时间】:2009-09-17 19:57:39
【问题描述】:

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

我想截取 Javascript 对象属性的“gets”和“sets”。

在 Python 中,我可以编写以下代码:

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

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

Javascript 呢?

【问题讨论】:

  • 在问题关闭时将此添加为评论。对于像我这样来自 python 背景的 js 新手,我正在寻找的是,对于 getattr,myObj[myKey],对于 hasattr,myObj.hasOwnProperty(myKey )

标签: javascript


【解决方案1】:

没有。最接近的是 Firefox 中可用的 __defineGetter__,它定义了一个函数回调,以便在读取指定属性时调用:

navigator.__defineGetter__('userAgent', function(){
    return 'foo' // customized user agent
});

navigator.userAgent; // 'foo'

它与__getattr__ 的不同之处在于它是针对已知属性调用的,而不是作为对未知属性的通用查找。

【讨论】:

  • 哇!这是令人难以置信的。我希望有一个跨浏览器的版本。这将使 API 编程变得异常简单。
【解决方案2】:

标准 ECMAScript-262 第三版中没有。

另一方面,即将发布的第 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

【讨论】:

  • 这不是最初的问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2021-07-05
  • 2017-10-25
  • 1970-01-01
  • 2012-05-26
相关资源
最近更新 更多