javascript:实现python的__getattribute__之类的东西?

时间:2013-05-14 10:38:11

标签: javascript python dynamic duck-typing

有没有办法在javascript中实现python的__getattribute __()(或__getattr __())的功能?也就是说,只要使用无法解析的方法名称或属性名称调用对象,就会调用该方法?

例如,实现以下任何一种机制:

# Python's method syntax 
o.Name(args) # o.__getattr__('Name') is called and returns 
             # a function which is called with args
# Alternative method syntax
o.Name(args) # o.__getattr__('Name', args) is called and returns a value

# Properties syntax
o.Name = v  # o.__getattr__('Name', v) is called
v = o.Name  # o.__getattr__('Name') is called and returns a value

我对方法语法最感兴趣,但属性语法将是一个很好的奖励。谢谢!

2 个答案:

答案 0 :(得分:1)

正如@ thg435所指出的那样,问题在Is there an equivalent of the __noSuchMethod__ feature for properties, or a way to implement it in JS?的范围较窄的地方进行了讨论,但这里的答案适用于此。

用于在javascript中执行此操作的相应API正在制作中,名为ECMAScript Harmony Proxies,最近可能已使用Direct Proxy替换。跨平台尚不支持此API,但它可能适用于某些平台,例如最近的firefox和chrome。

答案 1 :(得分:0)

a = { 
  attr1 : 0,
  attr2 : 2
}

// Object {attr1: 0, attr2: 2}

function get(obj, attr) {
  return obj[attr];
}

get(a, 'attr2');

// 2

另一种方法是在对象内部使用方法:

a = { 
  attr1 : 0,
  attr2 : 2,
  myfunc: function(args) {
    alert(args);
  },
  get   : function(attr) {
    return this[attr];
  }
}

// Object {attr1: 0, attr2: 2, get: function}

a.get('attr2');

// 2

如果您获得的是功能,则可以立即拨打a.get('myfunc')('myarg')提醒myarg