访问范围问题

时间:2016-11-07 10:06:31

标签: javascript scope

我有一个javascript对象,其结构如下:

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

在我console.log()函数的check()中,我想打印item1的warn_lvl,但我无法弄清楚如何访问它。

我用this尝试了几件事,但没有任何效果。

访问此var的正确方法是什么?

修改

为了更准确(对不起,我的错误),我从另一个Javascript文件调用check函数,就像这样(只有相关部分):

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 个答案:

答案 0 :(得分:2)

如果您通过check致电object.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。无论您拨打object.item1.details.warn_lvl的方式如何,都可以通过check可靠地访问它:



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