在迭代中强制JavaScript方法使用类的属性而不是当前对象的属性

在迭代中强制JavaScript方法使用类的属性而不是当前对象的属性,javascript,javascript-objects,Javascript,Javascript Objects,我在JavaScript类中有用户数组(对象)。每个用户都有一个isActive属性。我创建了一个setUserStatus,用于修改每个用户中提到的属性: class usersGroupMake{ 构造函数(){ this.isGroupActive=true; 这是一个组={ groupId:1, 用户:[{ 名字:“约翰”, 姓:“霍普金斯”, 是的 }, { 名字:“蒂姆”, 姓:“库克”, 是的 }, { 名字:'结婚', 姓氏:“史密斯”, 是的 } ] }; this.setU

我在JavaScript类中有
用户
数组(对象)。每个用户都有一个
isActive
属性。我创建了一个
setUserStatus
,用于修改每个用户中提到的属性:

class usersGroupMake{
构造函数(){
this.isGroupActive=true;
这是一个组={
groupId:1,
用户:[{
名字:“约翰”,
姓:“霍普金斯”,
是的
},
{
名字:“蒂姆”,
姓:“库克”,
是的
},
{
名字:'结婚',
姓氏:“史密斯”,
是的
}
]
};
this.setUserStatus=函数(){
this.groups.users.forEach(函数(用户)){
user.isActive=user.isActive&&this.isGroupActive;
});
}
}
}
var userGroup1=new usersGroupMake();
userGroup1.setUserStatus();

log(userGroup1.groups.users)您可以做两件事:

首先,您可以在
.forEach()
之前的函数中保存对
this
的引用:

其次,可以使用箭头功能:

this.setUserStatus = function(){
  this.groups.users.forEach(user => {
    user.isActive = user.isActive && this.isGroupActive;
  });
}
编辑-我想第三种方法是利用
.forEach()
API,并提供一个明确的
this

this.setUserStatus = function(){
  this.groups.users.forEach(function(user) {
    user.isActive = user.isActive && this.isGroupActive;
  }, this);
}

您可以使用的
thisArg

class usersGroupMake{
构造函数(){
this.isGroupActive=true;
这是一个组={
groupId:1,
用户:[{
名字:“约翰”,
姓:“霍普金斯”,
是的
},
{
名字:“蒂姆”,
姓:“库克”,
是的
},
{
名字:'结婚',
姓氏:“史密斯”,
是的
}
]
};
this.setUserStatus=函数(){
this.groups.users.forEach(函数(用户)){
user.isActive=user.isActive&&this.isGroupActive;
},这是另一种方式:

class usersGroupMake{
构造函数(){
this.isGroupActive=true;
这是一个组={
groupId:1,
用户:[{
名字:“约翰”,
姓:“霍普金斯”,
是的
},
{
名字:“蒂姆”,
姓:“库克”,
是的
},
{
名字:'结婚',
姓氏:“史密斯”,
是的
}
]
};
this.setUserStatus=函数(){
this.groups.users.map((用户)=>{
user.isActive=user.isActive&&this.isGroupActive;
});
}
}
}
var userGroup1=new usersGroupMake();
userGroup1.setUserStatus();

console.log(userGroup1.groups.users);
在回调中使用可能的重复项,
不是当前用户,未定义。
this.setUserStatus = function(){
  this.groups.users.forEach(function(user) {
    user.isActive = user.isActive && this.isGroupActive;
  }, this);
}