我将一些函数名称存储为字符串,然后稍后使用它们进行调用。我熟悉这种模式:
window[myStringName]();
但是,如果我要调用的函数没有直接全局公开,则这不起作用。我试图保持命名空间,并且只为整个脚本公开了1个全局变量。所以问题是,如何在不使用eval的情况下调用这些内部函数?
var myFunc = (function(myFunc){
myFunc.myInnerFunc = function(){
alert('hi');
};
myFunc.myObj = {
innerObjFunc: function(){
alert('howdy');
}
};
return myFunc;
}(myFunc || {}));
或者使用eval有任何缺点吗?我的印象是eval是邪恶的,不应该使用,否则Douglas Crockford会在我的袜子里留下一块煤。
这是我要拆分字符串然后以某种方式聪明地建立电话的地方,但我不确定如何......
答案 0 :(得分:0)
这最终是我决定做的。使用类似于@nderscore建议的对象数组。除了我将对象的索引存储在我的html元素的data-action
中。比我想象的更容易展示。
HTML:
<div id="pretendBox"></div>
JS:
var myOptions,
myObj;
myObj = (function(myObj){
myObj.myFunc = function(msg){
alert(msg);
};
return myObj;
}(myObj || {}));
myOptions = [
{
action: myObj.myFunc
}
];
$.each(myOptions, function(index, value){
$('#pretendBox').append('<div data-action="'+index+'" class="anOption">An Option</div>');
});
$(document).on('click', '.anOption', function(){
myOptions[Number($(this).attr('data-action'), 10)].action('hi');
});