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 类中的“私有”方法访问“公共”方法
使用 CoffeeScript 在“公共函数”类中获取“私有方法”