有没有办法在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
我对方法语法最感兴趣,但属性语法将是一个很好的奖励。谢谢!
答案 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