如何根据传入的参数调用对应的方法?

2013-05-29 22:04:43 +08:00
 yakczh
比如传入"isIP" 执行下面的代码

Validator.check(data).isIP();

除了eval有别的办法 吗?
2707 次点击
所在节点    程序员
6 条回复
rrfeng
2013-05-29 22:13:23 +08:00
这不就是参数解析么?加个 if/case 就解决了嘛……
yakczh
2013-05-29 22:45:50 +08:00
这是验证函数,有50多个,还有的是动态注册的
alsotang
2013-05-29 23:40:31 +08:00
__getattr__ 这个东西应该是你要的。
codepiano
2013-05-29 23:48:06 +08:00
obj = {
a:function(){
alert('a');

},
b:function(){
alert('b');

},
c:function(){
alert('c');
}
}

function test(name){
obj[name]();
}

test('c');
test('a');
test('b');

你是想要这个效果吗?
yakczh
2013-05-30 08:35:59 +08:00
如果带参数呢

test('isIP') 调用 Validator.check(data).isIP();
test('isRange',[100,200]),调用 Validator.check(data).isRange(100,200);

参数怎么传?
codepiano
2013-05-30 11:38:23 +08:00
@yakczh 如下
obj = {
a:function(args){
alert(args);
},
b:function(args){
alert(args);
},
c:function(args){
alert(args);
}
}

function test(){
args = Array.prototype.slice.apply(arguments);
name = args.shift();
obj[name](args);
}

test('c',1);
test('a',2,3);
test('b',4,5,6);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX