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

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

本文关键字:变量值 一个 上给 this 对象 数组      更新时间:2023-09-26

我在Stackoverflow上的多个问题中看到,我可以将变量传递给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 一样,我会在每个数组对象上得到"会话"。

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

所以首先这一行:

var type = data.type;

应该是

this.type = data.type;

在上面的代码中,"this"将引用$('.test'),即使用带有类'test'的dom元素创建的jQuery对象。

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

它看起来像这样

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

另外,关于变量国家数据 = [];AND countryData[this.countryIsoCode] = this.type;

您可能需要将国家/地区数据转换为对象,以便

var countryData = {};

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