我不感兴趣的呼叫或应用来改变this
参考。 只是我自己的利益,我有一个想法另一个玩需要的JavaScript,这将使一些清洁剂的定义技术,目标是不是必须通过数组或引用双模块名称为我的定义。
我使用的toString和eval上的功能,但我不知道是否有这样做更安全或更有效的方式将样品溶液(只是一个概念证明)。
// Sample module libraries (would probably be in their own files)
someModules = {
testModule: {test: function(){console.log("test from someModule")}},
anotherModule: { doStuff: function(){console.log("Doin stuffs!");}}
};
sampleRequire = function() {
// Load the modules
for (var i=arguments.length-2; i>=0; --i){
// Create a local variable reference to the module
eval ('var '+arguments[i]+' = someModules.'+arguments[i].toString());
}
// Redefine the programmer's function so that it has my local vars in its scope
eval("var fn = "+arguments[arguments.length-1]);
return fn;
}
// Main code...
sampleRequire( 'testModule', 'anotherModule',
function(){
testModule.test();
anotherModule.doStuff();
}
)();
编辑:
尖尖作出了良好的出发点,这将彻底摧毁主要功能的范围,这很多时候是不可接受的。 理想情况下,我想看到正在向函数的范围模块变量,而重挫的其他范围的变数(与模块名称的例外 - 程序员必须知道不是两件事情使用相同的名称)。 我敢打赌,这可能是不可能的,但我还是喜欢看一些想法。
另一个目标是灵活地做到这一点,而不必每个模块添加参数的主要功能。 否则,我们又回到了原点与CommonJS的风格(这我并不想打,只是好奇范围!)。