为forEach方法中的数组项指定值';这';(javascript)

为forEach方法中的数组项指定值';这';(javascript),javascript,arrays,foreach,this,Javascript,Arrays,Foreach,This,我在数组上使用forEach方法,我希望使数组项具有值“this” 当我将下面代码中的'item'更改为='this'时,什么也不会发生 用forEach方法可以做到这一点吗,或者我正在尝试的是不可能的 我已经从我正在使用的实际代码中简化了这个问题,这样就不会增加更多的复杂性(在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都具有“this”值) 在下面的示例中,我只需要使用“this”来更改背景色 代码笔链接在这里 var div1=document.getElementById

我在数组上使用forEach方法,我希望使数组项具有值“this”

当我将下面代码中的'item'更改为='this'时,什么也不会发生

用forEach方法可以做到这一点吗,或者我正在尝试的是不可能的

我已经从我正在使用的实际代码中简化了这个问题,这样就不会增加更多的复杂性(在实际代码中,数组项控制一系列滚动触发器,我需要其中的每一个都具有“this”值)

在下面的示例中,我只需要使用“this”来更改背景色

代码笔链接在这里

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
一个接一个地瞄准他们