如何通过名称调用私有函数

时间:2016-04-27 10:16:47

标签: javascript angularjs reflection

如何按名称调用函数? 其实我知道如何按名称调用函数,但我找不到所需的范围。 所以现在我必须使用 this [“ get ”+ widgetName] ,它适用于 _get_publishedBuildsWidget1 ,但我希望将make函数设置为私有。< / p>

所以我想按名称调用 _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;
        };

1 个答案:

答案 0 :(得分:2)

除了通过eval()之外,您无法通过字符串变量调用私有函数,这通常是一个坏主意。

但是,您可以轻松地创建一个私有对象,其中包含引用到这些私有方法,然后索引到那些私有对象以获得所需的函数:

function widgetGeneratorService(...) {

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

    methods['func1']();

}