为forEach方法中的数组项指定值';这';(javascript)
我在数组上使用forEach方法,我希望使数组项具有值“this” 当我将下面代码中的'item'更改为='this'时,什么也不会发生 用forEach方法可以做到这一点吗,或者我正在尝试的是不可能的 我已经从我正在使用的实际代码中简化了这个问题,这样就不会增加更多的复杂性(在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都具有“this”值) 在下面的示例中,我只需要使用“this”来更改背景色 代码笔链接在这里为forEach方法中的数组项指定值';这';(javascript),javascript,arrays,foreach,this,Javascript,Arrays,Foreach,This,我在数组上使用forEach方法,我希望使数组项具有值“this” 当我将下面代码中的'item'更改为='this'时,什么也不会发生 用forEach方法可以做到这一点吗,或者我正在尝试的是不可能的 我已经从我正在使用的实际代码中简化了这个问题,这样就不会增加更多的复杂性(在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都具有“this”值) 在下面的示例中,我只需要使用“this”来更改背景色 代码笔链接在这里 var div1=document.getElementById
var div1=document.getElementById('div1');
var div2=document.getElementById('div2');
var div3=document.getElementById('div3');
var myArray=[div1,div2,div3]
myArray.forEach(函数(项){
项目=本;
this.style.backgroundColor=“蓝色”;
})
.div{
高度:50px;
宽度:50px;
背景色:红色;
边缘底部:10px;
}
您可以在回调中设置
this
的值,但不能在每次迭代中将其设置为新项。这将是不必要的和冗余的,因为参数的存在就是为了这个目的
在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都有“this”值
至于你提到的实际情况,你需要提供更多的细节。一个单独的功能就足够了
var div1=document.getElementById('div1');
var div2=document.getElementById('div2');
var div3=document.getElementById('div3');
var myArray=[div1,div2,div3];
myArray.forEach(函数(项){
doStuff.call(项目);
});
函数doStuff(){
this.style.backgroundColor=“蓝色”;
}
.div{
高度:50px;
宽度:50px;
背景色:红色;
边缘底部:10px;
}
您可以在回调中设置
this
的值,但不能在每次迭代中将其设置为新项。这将是不必要的和冗余的,因为参数的存在就是为了这个目的
在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都有“this”值
至于你提到的实际情况,你需要提供更多的细节。一个单独的功能就足够了
var div1=document.getElementById('div1');
var div2=document.getElementById('div2');
var div3=document.getElementById('div3');
var myArray=[div1,div2,div3];
myArray.forEach(函数(项){
doStuff.call(项目);
});
函数doStuff(){
this.style.backgroundColor=“蓝色”;
}
.div{
高度:50px;
宽度:50px;
背景色:红色;
边缘底部:10px;
}
Array.prototype.forEach
不同于jQuery
的每个函数,因为forEach
将数组中的项、该项的索引和数组本身传递给其回调函数。所以回调应该是这样的:
function(item, index, array)
而forEach
,与each
不同,它不会将项目作为this
传递给其回调,因此您必须使用item
。因此,由于您没有将this
参数指定给forEach
,并且函数似乎没有绑定到任何this
,因此它内部的this
将引用窗口
beign说,您的代码应该是:
myArray.forEach(function(item){
item.style.backgroundColor = "blue";
// ^^^^ item is the current item from the array myArray
});
注意:
正如@newToJs所提到的,您可以使用document.getElementsByClassName
或document.querySelectorAll
一次性获取所有div,而不是使用document.getElementById
逐个获取div:
var divs=document.queryselectoral(“.div”);
//divs不是一个没有forEach函数的数组(它是一个节点列表,类似于数组的对象)(至少在一些较旧的浏览器中不是这样),所以我们必须像这样使用forEach的.call
[]forEach.call(div、函数(项){
item.style.backgroundColor=“蓝色”;
});代码>
.div{
高度:50px;
宽度:50px;
背景色:红色;
边缘底部:10px;
}
Array.prototype.forEach
不同于jQuery
的每个函数,因为forEach
将数组中的项、该项的索引和数组本身传递给其回调函数。所以回调应该是这样的:
function(item, index, array)
而forEach
,与each
不同,它不会将项目作为this
传递给其回调,因此您必须使用item
。因此,由于您没有将this
参数指定给forEach
,并且函数似乎没有绑定到任何this
,因此它内部的this
将引用窗口
beign说,您的代码应该是:
myArray.forEach(function(item){
item.style.backgroundColor = "blue";
// ^^^^ item is the current item from the array myArray
});
注意:
正如@newToJs所提到的,您可以使用document.getElementsByClassName
或document.querySelectorAll
一次性获取所有div,而不是使用document.getElementById
逐个获取div:
var divs=document.queryselectoral(“.div”);
//divs不是一个没有forEach函数的数组(它是一个节点列表,类似于数组的对象)(至少在一些较旧的浏览器中不是这样),所以我们必须像这样使用forEach的.call
[]forEach.call(div、函数(项){
item.style.backgroundColor=“蓝色”;
});代码>
.div{
高度:50px;
宽度:50px;
背景色:红色;
边缘底部:10px;
}
我认为你把数组.prototype.forEach
与jQuery
的每个混淆了。为什么不使用类来定位它们呢?这将使事情变得更容易,并且避免通过id
一个接一个地瞄准他们