1

有没有办法在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

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

4

2 回答 2

1

正如@thg435 所指出的,这个问题是在更窄的范围内讨论的,是否存在与 __noSuchMethod__ 属性等效的特性,或者在 JS 中实现它的方法?但那里的答案适用于此。

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

于 2013-05-17T13:04:42.547 回答
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

于 2013-05-14T10:48:02.573 回答