javascriptで文字列から同じ名前の関数を実行する

perlでよくやるんですが、
#!/usr/bin/perl

use strict;
use warnings;

my $obj = new Foo;
$obj->func('foo'); # 'foo'という文字列を渡すと、foo()を実行してくれる

package Foo;

sub new {
    my ($class) = @_;
    return bless {}, $class;
}

sub func {
    my ($self, $name) = @_;
    $self->$name(); # ここが肝
}

sub foo {
    my ($self, $name) = @_;
    warn "OK";
}
と書くと、
satoshi@debian:~/$ perl func.pl
OK at func.pl line 23.
と、文字列から同じ名前の関数を実行することができます。
これと似たようなことをjavascriptでやってみたくなったので、
備忘録がてらメモします。

evalを使う方法とか、何パターンかあったけど、
採用したのは以下の方法。
var Obj = {};
Obj.func = function (type, params){
    if(typeof this[type] == 'function'){
        this[type](params);
    }
};
Obj.foo = function (params){ console.log('foo function') };
Obj.func('foo', {});
もっといい方法がないか、引き続き調査してみる。

人気の投稿