javascript - 如何通过名称调用私有(private)函数

标签 javascript angularjs reflection

如何通过名称调用函数? 实际上我知道如何按名称调用函数,但我找不到所需的范围。 所以现在我必须使用 this["get"+ widgetName] ,它适用于 _get_publishedBuildsWidget1 但我希望将函数设置为私有(private)。

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

最佳答案

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

但是,您可以简单地创建一个包含对这些私有(private)方法的引用的私有(private)对象,然后对其进行索引以获得所需的函数:

function widgetGeneratorService(...) {

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

    methods['func1']();

}

关于javascript - 如何通过名称调用私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36886922/

相关文章:

javascript - file.value 返回未定义

javascript - ng-submit angular js不能在php中工作

javascript - 页面刷新导致用户在angular js中自动注销

c# - 从 fieldinfo 获取通用值会引发异常 : "Late bounds operation cannot be performed..."

c# - 在 C# 中将类成员引用为枚举

javascript - 有没有更好和/或更快的方法来执行这个正则表达式?

javascript - 在 API 中调用 API - jQuery/Handlebars

jquery - 指令中缺少子元素

scala - java.lang.NoClassDefFoundError : scala/reflect/api/TypeCreator

javascript - ModalInstanceCtrl 给出此错误的最常见原因是什么?