2013-05-14 54 views
1

有没有办法在JavaScript中实现python的__getattribute __()(或__getattr __())的功能?也就是说,每当使用无法解析的方法名称或属性名称调用对象时,都会调用该方法?javascript:实现类似python的__getattribute__?

例如,一个机制来实现任何如下:

# 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

相关:http://stackoverflow.com/questions/2266789/is-there-an-equivalent-of-the-nosuchmethod-feature-for-properties-or-wayway – georg 2013-05-14 14:38:59

回答

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

+0

我希望能有更多'自动'的方法,这将'a.attr3'... – 2013-05-14 12:35:51

+1

@UriCohen工作当然你可以通过'a.attr2'获得一个属性值,如果它是一个函数,你可以称它为'a.myfunc() ' – 2013-05-14 12:40:20