将对象传递给数组时,在 this.x 上给 "x" 一个变量值

Give "x" on this.x a variable value when passing objects to an array

我在 Whosebug 上的多个问题中看到,我可以将变量传递给 this 关键字:

name = "world";
alert("Hello " + this.name);

但是,我正在努力处理以下代码:

$('.test').click(function() {
    var data = $(this).data();
    var type = data.type;

    $('#world-map-geo1').empty();

    $.getJSON('json/geoCountries-' + site + '.json', function (pushArray) {
        var countryData = [];
        console.log(type);
        $.each(pushArray, function() {
            // Following line doesn't make what I expect.
            countryData[this.countryIsoCode] = this.type;
            // alert(this.type)
        });
        console.log(countryData);
    });
});

点击一个li就执行函数,f.i.:

<li class="test" data-type="sessions">Sessions</li>

我得到了未定义的值,因为 this.type 似乎没有被转换为 this.sessions。但是,如果我手动将 this.type 更改为 this.sessions,它会正常工作。

我知道这不是变量范围的问题,就像我将 this.type 替换为唯一类型一样,我在每个数组对象上得到 "sessions"。

我完全确定,问题是我对 jquery 以及此关键字如何适用于这种特定方法的了解有限,尽管我还没有尝试过,但我相信如果我有一个名为在我的 json 中键入,this.type 将采用这些值而不是 this.sessions.

中的值

首先是这一行:

var type = data.type;

应该是

this.type = data.type;

在您上面的代码中,'this' 将引用 $('.test'),即使用 dom 元素和 class 'test'.

对于您稍后拥有的数组,您将需要确保内部函数的作用域知道其父 'this' 上下文。这通常是通过将内部函数绑定到它的父函数来完成的。

看起来像这样

$.method = func(){}.bind(this);

此外,关于 var 国家数据 = []; AND countryData[this.countryIsoCode] = this.type;

您可能需要将 countryData 变成一个对象,这样

var countryData = {};

我建议阅读数组和对象之间的差异,即 [] 与 {}。