2016-04-27 11 views
0

Wie Funktion aufrufen nach Name? Eigentlich weiß ich, wie Funktion aufrufen nach Name, aber ich kann nicht erforderlichen Bereich finden. So, jetzt Ich habe dies nutzen [ „bekommen“ + widgetName] ist es Werke für _get_publishedBuildsWidget1 aber ich möchte Funktion als privat machen.Wie private Funktion mit Namen aufrufen

Deshalb möchte ich namentlich aufrufen _get_publishedBuildsWidget2 Funktion

function widgetGeneratorService(commonDashboardService, $filter, buildService, $state) { 

      var widgetGeneratorServiceFactory = {}; 

      widgetGeneratorServiceFactory._get_publishedBuildsWidget1 = function (widget) { 
       widget.name = "Test", 
       return widget; 
      } 
      var _get_publishedBuildsWidget2 = function(widget){ 
    widget.name = "Test", 
       return widget; 
    } 

      widgetGeneratorServiceFactory.getDefaultWidget = function (widgetName) { 
       var defaultWidget = {}; 
       //TODO rewrite!!! 
       var fnGenerateWidget = this["_get_" + widgetName]; 
       if (typeof fnGenerateWidget === 'function') { 
        return fnGenerateWidget(defaultWidget); 
       } 


       return defaultWidget; 

      } 

      return widgetGeneratorServiceFactory; 
     }; 

Antwort

2

Sie keine privaten Funktionen über eine String-Variable außer über eval() aufrufen kann, und das ist generell eine schlechte Idee.

Sie können aber trivialerweise ein eigenes Objekt erstellen, das Referenzen auf diese privaten Methoden enthält, und dann Index in denen die gewünschte Funktion zu erhalten:

function widgetGeneratorService(...) { 

    var methods = { 
     func1: func1 
     ... 
    }; 

    methods['func1'](); 

} 
Verwandte Themen