2016-12-25 6 views
1

私のJavaScriptプロジェクトをどのようにして構築するかについては、私の基本的なJavaScriptオブジェクトの例で説明します。私はいくつかの助けを求めています。JavaScriptのルートレベルのオブジェクトへのアクセスこのキーワードの値

私のTestApp.init()関数この関数は、cacheという別のオブジェクトの1レベル深い別の関数であるthis.cache.cacheFuncOne();と呼びます。

内部this.cache.cacheFuncOne();メインオブジェクトthis.prop1のプロパティにアクセスしようとすると、定義されません。

他のオブジェクトに1レベル深くネストされていない他の関数からthis.prop1にアクセスすると、期待どおりに動作し、値が表示されます。

cache{}オブジェクトでは、thisキーワードは、ルートレベルオブジェクトのthisと同じ値ではありません。

この簡単なデモに基づいて、以下のcache{}オブジェクト内のルートレベルthisの値にはどのようにしてアクセスできますか?

var TestApp = { 
 
    prop1: 'property1', 
 

 
    init: function() { 
 
    this.cache.cacheFuncOne(); 
 
    alert(this.prop1); 
 
    }, 
 

 
    funcOne: function() { 
 

 
    }, 
 

 
    funcTwo: function() { 
 

 
    }, 
 

 
    cache: { 
 

 
    cacheFuncOne: function() { 
 
     alert(this.prop1); 
 
    }, 
 
    } 
 

 
} 
 

 
TestApp.init();

+0

これはシングルトンオブジェクトなので、 'TestApp.prop1'を使います。 –

+0

私はあなたが親スコープのこの値を取得するために.bind(this)を使うことができると思います。 –

答えて

2

を使用することcall()apply()のいずれかです。どちらもFunctionのプロトタイプの一部であり、最初の引数は関数内にthisになるオブジェクトです。

は、だからあなたの場合には、これを行うことができます:

// ... 
init: function() { 
    this.cache.cacheFuncOne.call(this); 
    alert(this.prop1); 
} 
// ... 

また、あなたがES6を使用している場合、あなただけarrow functionを使用することができます。

1

あなたはES6/ES2015を使用することはできますか?もしそうなら、あなただけの

cacheFuncOne:() => { 
    alert(this.prop1); 
}, 

this矢印の機能を使用することができますprop1でオブジェクトを参照します。


別のオプションは、あなたが探しているものbind(this)

cacheFuncOne: function() { 
    alert(this.prop1); 
}.bind(this), 
関連する問題