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

Posted

技术标签:

【中文标题】JavaScript,在公共方法中将私有函数作为字符串调用,而不使用 eval(显示模式)【英文标题】:JavaScript, call private function as a string inside public method without using eval (Revealing pattern) 【发布时间】:2013-06-22 01:54:27 【问题描述】:

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

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();
);

有人可以帮助我吗?

谢谢!

【问题讨论】:

【参考方案1】:

让你的私有函数属性成为一个对象?

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。如果是这样,它就不会是“私人的”。这意味着您正在尝试调用window[undefined],这不是一个函数。

【讨论】:

这就像一个魅力。唯一的“问题”是我需要重新构建我所有的私人功能以保持相同的风格。 @user1648170 - 为什么需要通过包含其标识符的字符串来调用所有这些函数?你不能大部分时间只做privateMethod('test')吗? 我正在使用数据字段即时附加事件。像这样:'Up';使用 data-event 知道什么事件触发了 up 处理程序 :) 非常有帮助的答案...我自己花了一点时间才弄明白。

以上是关于JavaScript,在公共方法中将私有函数作为字符串调用,而不使用 eval(显示模式)的主要内容,如果未能解决你的问题,请参考以下文章

从 javascript 类中的“私有”方法访问“公共”方法

javascript 实例 静态 公共 私有

使用 CoffeeScript 在“公共函数”类中获取“私有方法”

有啥方法可以在纯 javascript 中将元素作为函数获取?

在 JavaScript 中的公共方法中获取私有方法值

javascript 仿面向对象编程实例代码(私有,公共变量。。。)