私は現在、ユーザーが loadModules() 関数を介してモジュールをロードできるようにする API を作成しています (一種のプラグイン機能を提供するため)。
完全なコード:
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]);
これは問題なく動作し、安全であると確信しています (モジュールが存在しない場合はエラーがスローされます) が、これを行うためのよりエレガントな方法はありますか? これを達成するために考えられる唯一の方法は、モジュール自体をオブジェクト内に配置して、より簡単に参照できるようにすることです。他の考え/アイデアは大歓迎です!