Может ли функция вызываться с использованием строкового значения в строгом режиме

Мне было интересно, можно ли вызвать функцию, передав имя строки. Ниже приводится базовая архитектура:

Javascript:

"use strict";
function foo(){
   var f = this;
   f.fn = function(o){return fn(o)}

   function fn(o){
      o.name();
   }

   function a(){
      alert('a');
    }

    function b(){
      alert('bb');
    }

}

var f = new foo();


f.fn({name:'a'}); 
f.fn({name:'b'});

Код настраивается по адресу http://jsfiddle.net/rexonms/9c7bnkc9/.

1 ответ

Вы можете достичь этого, используя eval:

function foo(){
    var f = this;
    f.fn = function(o){return fn(o)}

    function fn(o){
        eval(o.name + '()');
    }

    function a(){
        alert('a');
    }

    function b(){
        alert('bb');
    }

}

var f = new foo();


f.fn({name:'a'});
f.fn({name:'b'});

Вот jsFiddle: http://jsfiddle.net/9c7bnkc9/2/

Другие вопросы по тегам