使用 $.each 上的调用
2015-10-04
31
我尝试了以下代码片段:
$.each.call({foo: 'bar'}, [1,2,3], function(i){console.log(i, this);})
我以为它会打印出 {foo: 'bar'} 作为
this
值,但它打印的是项目(这是 $.each 的预期行为)。有人能解释为什么
this
值没有被覆盖吗?
2个回答
将
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);
要在
jQuery.each()
回调中设置
this
,请尝试在传递给
jQuery.each(obj, callback)
的回调函数上使用
Function.prototype.bind()
$.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>
guest271314
2015-10-04
另请注意,您不需要
jquery
进行这些类型的操作,因为您只需使用普通的 javascript 即可:
[1,2,3].map(function(i){ console.log(i, this); }.bind({foo:'bar'}) );
rism
2015-10-04