我尝试过以下代码:
$.each.call({foo: 'bar'}, [1,2,3], function(i){console.log(i, this);})
我认为它会为this
值打印{foo:'bar'},而是打印项目(这是$ .each的预期行为)。有人可以解释为什么this
值没有被覆盖吗?
答案 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'}) );