我目前正在寫一個API,允許用戶通過loadModules()函數加載模塊(以給人一種插件功能):替代使用eval?
代碼全:
var LC = (function(){
var alertModule = {
alertName: function(name) {
alert(name);
},
alertDate: function() {
alert(new Date().toUTCString());
}
}
var logModule = {
logName: function(name) {
console.log(name);
},
logDate: function() {
console.log(new Date().toUTCString());
}
}
return {
loadModules: function(moduleList) {
for(var i=0, l=moduleList.length; i<l; i++) {
try {
this[moduleList[i]] = eval(moduleList[i]);
} catch(e) {
throw("Module does not exist");
}
}
}
}
})();
LC.loadModules(['alertModules', 'logModule']);
下面的代碼會將alertModule和logModule對象添加到LC對象。
LC.loadModules(['alertModule', 'logModule']);
裏面的loadModules方法,我循環遍歷數組並使用下面的代碼將對象添加到LC:
this[moduleList[i]] = eval(moduleList[i]);
這工作得很好,我相當肯定它是安全(如果該模塊不存在,則會引發錯誤),但有沒有更好的方法來做到這一點?我能想到的唯一方法就是將模塊本身放在一個對象中,這樣我就可以更容易地引用它們。任何其他想法/想法都會受到歡迎!
始終都張貼在問題本身***相關的代碼***的,不只是鏈接。 (即使它是jsFiddle - 小提琴是一個不錯的*補充*,而不是替代品。)http://meta.stackexchange.com/questions/118392/add-stack-overfow-faq-entry-or-similar- for-putting-code-in-the-question – 2013-03-15 10:45:03
檢查此:http://stackoverflow.com/questions/4162827/alternative-to-eval-in-javascript – Amrendra 2013-03-15 10:47:42
道歉,代碼添加正確... – thesonglessbird 2013-03-15 10:52:54