2016-04-27 47 views
0

如何通過名稱調用函數? 其實我知道如何通過名稱調用函數,但我找不到所需的範圍。 所以現在我必須使用這個[「得到」 + widgetName],它是_get_publishedBuildsWidget1的作品,但我想使功能爲私有。如何通過名稱調用私有函數

所以,我想通過名稱_get_publishedBuildsWidget2功能

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; 
     }; 

回答

2

無法通過一個字符串變量調用私有函數除了通過eval()調用,這通常是一個壞主意。

但是你可以平凡創建包含引用那些私有方法,然後索引到一個私有對象,以獲得所需的功能:

function widgetGeneratorService(...) { 

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

    methods['func1'](); 

} 
相關問題