在python中,我可以这样做:
class Converter(object):
def __init__(self, amount):
self.amount = amount
def rupy(self):
return self.amount * 2
def __getattr__(self, *args, **kwargs):
if args[0] == 'rupies':
return self.rupy
JS是否提供了一些实现相同行为的方法?我搜索了一下,找到了关于noSuchMethod的文章,但它仅适用于Firefox。
编辑:我不想要别名我希望有办法处理一般缺少的方法
答案 0 :(得分:1)
简短回答
JavaScript 是否等同于
__getattr__
?
否:(
长答案
看起来您只想映射别名, JavaScript 在添加属性时没有问题
// set up
function Converter(amount) {
this.amount = amount;
}
Converter.prototype.rupy = function () {
return this.amount * 2;
};
// add aliases
var original = 'rupy', aliases = ['rupies'], i;
for (i = 0; i < aliases.length; ++i)
Converter.prototype[aliases[i]] = Converter.prototype[original];
现在
var foo = new Converter(1);
foo.rupies(); // 2
并且
foo.rupies === foo.rupy; // true
未来的答案
在 ECMAScript 6(和谐)中,我们有Proxies
Constructor.prototype = Proxy(Constructor.prototype, {
'get': function (target, name, child) {
var o = child || target; /* =proxy? if proxy not inherited? */
if (name in target) return o[name];
if (name === 'rupies') return o['rupy'];
return;
},
'set': function (target, name, val, child) {
return target[name] = val;
},
'has': function (target, name) {
return name in target; // do you want to make 'rupies' visible?
},
'enumerate': function (target) {
for (var key in target) yield key;
}
});