私はいくつかの「モジュール」を備えたアプリを構築しています。各モジュールには同様の基本セットの機能が必要なので、各モジュールがプロトタイプの継承を介して継承する基本モジュールを作成しました。基本モジュールの関数名のいくつかは非常に長く、これらの関数は頻繁に使用されるため、各モジュール内で短い名前を割り当てたいのですが、これにより、「this」の値をDOMWindowと等しく設定する際に問題が発生します。
以下のコードを参照してください。
var SAMPLEAPP = SAMPLEAPP || {};
//This is a base module that I want all other modules to inherit from
SAMPLEAPP.Module = function(){
};
SAMPLEAPP.Module.prototype.someLongFunctionName = function(){
console.log(this);
};
//This is a module that inherits from the base module
SAMPLEAPP.RouterModule= function(){
var shortName = this.someLongFunctionName;
//This correctly logs 'SAMPLEAPP.RouterModule', but I would rather not type
//out this long function name each time I need to use the function
this.someLongFunctionName();
//However, this code logs 'DOMWindow' when I would expect the value of 'this'
//to be the same as the direct call to this.someLongFunctionName
shortName();
};
SAMPLEAPP.RouterModule.prototype = new SAMPLEAPP.Module();
new SAMPLEAPP.RouterModule();
私の質問:shortName()を呼び出すとSAMPLEAPP.RouterModuleがログに記録されるようにコードを変更するにはどうすればよいですか?可能であれば、shortNameの実際の呼び出しではなく、モジュールの定義方法を変更したいと思います(つまり、shortname.call(this)は、someLongFunctionNameのエイリアスを作成する目的を無効にします)