使用$ .each上的调用

时间:2015-10-04 02:39:46

标签: javascript jquery

我尝试过以下代码:

$.each.call({foo: 'bar'}, [1,2,3], function(i){console.log(i, this);})

我认为它会为this值打印{foo:'bar'},而是打印项目(这是$ .each的预期行为)。有人可以解释为什么this值没有被覆盖吗?

2 个答案:

答案 0 :(得分:1)

this设置为obj的原因似乎是jQuery.each()来源

的这些部分
value = callback.apply(obj[i], args);

value = callback.call(obj[i], i, obj[i]);

其中callback是传递给jQuery.each()的函数,obj设置为this:传递给每个迭代的数组或对象参数

function (obj, callback, args) {
    var value, i = 0,
        length = obj.length,
        isArray = isArraylike(obj);

要在this回调时设置jQuery.each(),请尝试在传递给Function.prototype.bind()的回调函数上使用jQuery.each(obj, callback)

$.each([1,2,3], function(i){console.log(i, this);}.bind({foo:"bar"}))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>

答案 1 :(得分:0)

另请注意,对于这些类型的操作,您不需要jquery,因为您可以使用普通的javascript:

 [1,2,3].map(function(i){ console.log(i, this); }.bind({foo:'bar'}) );