1

我的 IDE RubyMine 说这是“可能不正确”:

function update_top_up_prices_via_localStorage(){
    var index = localStorage.getItem("volxs");
    $('.product-inner').each(function(){

        var product = this.getAttribute('data-product-miles');
        var cpm = ((localStorage.getItem("cpm_by_volxs_"+product)).split(","))[index];

        $(this).find('table tbody tr td').each(function(){
            var top_up_miles = Number(this.getAttribute('data-topup-miles'));
            var price = Number(top_up_miles * cpm * 1.06);
            price = price.toFixed(2);
            $(this).text('\u00A3'+price);
        })
    });
}

我的 IDEvar top_up_miles在线上说,“可能无效使用this. 这会检查 javascriptthis在闭包中与在外部上下文中是否相同。

js 在 Chrome 和 IE9 中运行良好。它在 IE8 中不起作用。

这是错的吗?有没有更好的方法来写这个?

4

2 回答 2

3

RubyMine 不知道$().each使用指定this上下文执行传递的函数。如果您想避免该警告,请使用

$(/* ... */).each(function (i, elem) { 
    elem.getAttribute(/* ... */);
});

等等

您的代码不适用于 IE8 的原因可能与此无关。然而,为了更好的兼容性,使用 jQuery 包装的函数而不是原生 API 函数:$(this).attr而不是this.getAttribute(感谢@freakish)

于 2012-07-12T11:46:31.007 回答
1

this它提请您注意警告您在 JavaScript 中使用关键字时应该小心,因为它this总是指函数所有者。

要了解更多信息,请参阅有关 JavaScript关键字的 quirksmode 的这篇文章this

于 2012-07-12T11:48:28.780 回答