我可以绑定'这'对于函数

Can I bind something else than 'this' for a function?

本文关键字:函数 绑定 我可以 于函数      更新时间:2023-09-26

我需要将外部变量传递给jQueryAjax的成功函数。我的ajax是这样循环的:

var props = ['a', 'b', 'c'];
var results = 
{
    a: null,
    b: null,
    c: null
};
for(var key in props)
{
    var prop = props[key];
    $.ajax(
    {
        url: 'someurl',
        data:
        {
            somedata: 'somevalue'
        },
        success: function(data, status, xhr)
        {
            // This here does not work properly, because the prop's value changes
            // Due to promise stuff
            results[prop] = data;  
        }
    });
}

我需要将success中返回的数据填充到正确的位置,但上面的实现不起作用,因为在调用success之前prop的值发生了变化。

我发现我可以通过将成功函数的this与如下道具绑定来"绕过"这个问题:

success: function(data, status, xhr)
{
    results[this] = data;  
}.bind(prop)

但这似乎不是一个很好的主意,此外,我只能绑定一个变量,如果需要的话,不能绑定多个

这似乎也不起作用:

success: function(data, status, xhr)
{
    var privprop = prop;
    results[privprop] = data;  
}

那么,基本上,给每个成功回调一个"私有"变量的最佳方式是什么?当整个ajax生成时,prop的值是多少?我可以以某种方式绑定多个变量并覆盖this以外的内容吗?

尝试通过以下操作来限制特定ajax的每个prop变量的范围:

for(var key in props)
{
    var prop = props[key];
    (function(prop){

        $.ajax(
        {
            url: 'someurl',
            data:
            {
                somedata: 'somevalue'
            },
            success: function(data, status, xhr)
            {
                // This here does not work properly, because the prop's value changes
                // Due to promise stuff
                results[prop] = data;  
            }
        });
    })(prop);
}