在 和 的最近共享范围内定义一个functionToRun
变量Onsetsu.run
。在 内分配变量Onsetsu.run
:
var thisModule;
Onsetsu.run = function (functionToRun) {
thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
};
Onsetsu.run(function() {
/* thisModule should be visible here */
});
假设您的实际代码比这更复杂:
(function(){
var thisModule;
var Onsetsu = (function(){
var resolvedModule = { moduleName: "something" };
return {
run: function (functionToRun) {
thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
},
namespace: function(moduleName){ ... }
};
})();
Onsetsu.run(function() {
/* thisModule should be visible here */
});
})();
如果Onsetsu
是一个您不能(或不想)修改的库,那么您就不走运了。
编辑:您还可以在函数本身上分配一个属性:
Onsetsu.run = function (functionToRun) {
var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun.module = thisModule;
functionToRun();
};
您可以functionToRun
通过以下方式访问该物业arguments.callee
:
Onsetsu.run(function() {
var module = arguments.callee.module;
});
或者通过给函数命名:
Onsetsu.run(function fn() {
var module = fn.module;
});