2016-11-07 14 views
-2

私は次のように構成されているjavascriptオブジェクトがあります。私のcheck()機能から私のconsole.log()アクセスVAR - スコープの問題

var object = { 
    item1: { 
     name: 'item1', 
     details: { 
      name: 'detail1', 
      warn_lvl: 1 
     }, 
     check: function(res) { 
      console.log('Warn lvl of item1 = '+//access var?) 
     } 
    } 
} 

を、私はITEM1のwarn_lvlを印刷したいと思いますが、私はできませんそれにアクセスする方法を理解する。

thisでいくつか試してみましたが、動作するものはありません。

このvarにアクセスする適切な方法は何ですか?

編集

(申し訳ありませんが、私のミス)より正確には、私が(関連部分のみ)このように、別のJavaScriptファイルからのチェック機能を呼び出す:

var fetchMetrics = function (config, metrics) { 
     Object.keys(metrics).forEach(function(section) { 
      var metric = metrics[section]; 
      doRequests(metric, section); 
}; 

var doRequests = function(metric, section) { 

    $.ajax({ 
     dataType: "json", 
     url: metric.url, 
     data: metric.params, 
     var result; 

     if (!query_result.length) { 
      result = state_retriever.RESULT_UNKNOWN 
     } else { 
      result = metric.check(query_result); 
     } 
}; 
+1

「私はこれでいくつかのことを試してみました」 - のような?デバッグを求める質問には、[mcve]が必要です。 – Quentin

+0

最後のコードスニペットと元のスニペットはどのように一致しますか? 'metric'が' object.item1'に対応していれば( 'check'がどこにあるのか分かります)、xale94の' this.details.warn_lvl'はあなたが上で呼んでいる方法( 'metric。 check(query_result) ')を実行します。 –

+0

@ T.J.Crowder私は 'object' varで定義された各オブジェクトを使用していくつかのアクションを行います。 'check()'関数は、Ajax呼び出しから結果を受け取った後に呼び出されます。だから「これ」は当てはまりません(私が理解するように)。 – Mornor

答えて

2

場合checkobject.item1.check("res arg here")と呼んでいる場合は、this.details.warn_lvl

var object = { 
 
    item1: { 
 
    name: 'item1', 
 
    details: { 
 
     name: 'detail1', 
 
     warn_lvl: 1 
 
    }, 
 
    check: function(res) { 
 
     console.log('Warn lvl of item1 = ' + this.details.warn_lvl) 
 
    } 
 
    } 
 
}; 
 
object.item1.check();

しかし、あなたは別の方法checkを呼んでいると述べました。あなたは確実にかかわらず、あなたがcheckを呼び出す方法のobject.item1.details.warn_lvl経由でアクセスすることができます。

var object = { 
 
    item1: { 
 
    name: 'item1', 
 
    details: { 
 
     name: 'detail1', 
 
     warn_lvl: 1 
 
    }, 
 
    check: function(res) { 
 
     console.log('Warn lvl of item1 = ' + object.item1.details.warn_lvl); 
 
    } 
 
    } 
 
}; 
 
var c = object.item1.check; 
 
c();

+0

@TJCrowder、私はちょうど興味があります、なぜあなたの答えを削除しますか?私はそれが正しいことを意味します。別のものが 'this..'だった可能性があります。 – Rajesh

+0

私はそれをこのように呼んでいません。削除された答えを@ T.J Crowderがトリックをしました。 'object.item1.details.warn_lvl' – Mornor

+2

@Rajesh:それは間違っていたので、私はそれを実現するまでに正解が投稿されました。 –