【问题标题】:How invoke private function by name如何通过名称调用私有函数
【发布时间】:2016-04-27 10:16:46
【问题描述】:

如何通过名称调用函数? 实际上我知道如何按名称调用函数,但我找不到所需的范围。 所以现在我必须使用 this["get" + 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;
        };

【问题讨论】:

    标签: javascript angularjs reflection


    【解决方案1】:

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

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

    function widgetGeneratorService(...) {
    
        var methods = {
            func1: func1
            ...
        };
    
        methods['func1']();
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-22
      • 2016-09-09
      • 2017-06-12
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 2020-11-07
      • 1970-01-01
      相关资源
      最近更新 更多