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;
});