JavaScript,在不使用 eval 的情况下将私有(private)函数作为公共(public)方法中的字符串调用(显示模式)

标签 javascript string function design-patterns private

我试图在显示模式中调用一个私有(private)函数。这是我的代码:

var module = (function(){
    var privateMethod = function(val) {
        console.log(val);
    }
    var publicMethod = function() {
        var functionString = "privateMethod";
        /** This what I tried
        functionString.call('test');
        window[module.privateMethod]('test');
        */
    }
    return {
        init: publicMethod
    }
})();

$(document).ready(function(){
    module.init();
});

有人可以帮助我吗?

谢谢!

最佳答案

将对象的私有(private)函数属性设为对象?

var module = (function(){
    var privateFuncs = {
        privateMethod: function(val) {
            console.log(val);
        }
    };
    var publicMethod = function() {
        var functionString = "privateMethod";
        privateFuncs[functionString]('test');
    };
    return {
        init: publicMethod
    };
})();

由于不同的原因,您的其他尝试都失败了:

  • functionString.call('test') 永远不会工作,因为 functionString 指的是字符串文字。它没有 call 方法。

  • window[module.privateMethod]('test') 将不起作用,因为首先,module 没有属性 privateMethod。如果这样做,它就不会是“私有(private)的”。这意味着您正在尝试调用 window[undefined],这不是函数。

关于JavaScript,在不使用 eval 的情况下将私有(private)函数作为公共(public)方法中的字符串调用(显示模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17294443/

相关文章:

Python:为什么 __str__ 不调用递归?

C函数调用奇怪错误

函数类型中的快速子类

javascript - React-Native — 访问 componentDidMount 外部的函数

javascript - Ember : splitting the router into multiple files

javascript - FormData 在react中返回表单提交的空数据

javascript - 如何在 Python 中抓取包含动态内容(由 JavaScript 创建)的页面?

javascript - 在 Jetty 9 中使用 doGET 转发到另一个 html 页面时出错

Python : Splitting a string by numbers, 字母和 -_

php - 获取php中字符串的中间部分