我想创建4个新用户,
let JonSnow = new User({ id: 1, name: 'Jon Snow', status: Status.user });
let AryaStark = new User({ id: 2, name: 'Arya Star', status: Status.user });
let SansaStark = new User({ id: 3, name: 'Sansa Stark', status: Status.user });
let JoffreyBaretheon = new User({ id: 4, name: 'Joffrey Baretheon', status: Status.user });
在我的User类中,我有一个allUser
函数,
allUsers() {
let users: IUser[] = [];
let user: IUser = {
id: this.id,
name: this.name,
status: this.status
}
users.push(user);
users.forEach((user) => console.log(user));
return users;
}
如果我这样调用函数,
JonSnow.allUsers();
AryaStark.allUsers();
SansaStark.allUsers();
JoffreyBaretheon.allUsers();
按预期方式调用allUsers
函数4次。
如何将所有4个新用户存储到一个阵列中?所以我只需要调用一次该函数来显示所有用户?
答案 0 :(得分:1)
你可以拥有一个模块/命名空间变量(不要导出它,因此无法从外部访问),如下所示:
let users: IUser[] = [
new User({ id: 1, name: 'Jon Snow', status: Status.user }),
new User({ id: 2, name: 'Arya Star', status: Status.user }),
new User({ id: 3, name: 'Sansa Stark', status: Status.user }),
new User({ id: 4, name: 'Joffrey Baretheon', status: Status.user })
]
然后你有一个简单的方法:
allUsers(): IUser[] {
return users.slice(0);
}
请注意,我克隆了users
数组,以便谁获得对它的引用将无法更改此内部数组,但它不是必须的。
但是没有必要在所有类中使用此方法,您可以将其设置为静态
但是你也可以使这个数组成为User
类的静态成员,所以:
class User {
private static users: IUser[] = [];
constructor() {
User.users.push(this);
}
static allUsers(): IUser[] {
return User.users.slice(0);
}
}
您可以获得所有用户:User.allUsers()
。
答案 1 :(得分:1)
您似乎只是想将一堆User
个实例转换为IUser
个对象的单个数组。
我要做的是提供一个返回User
对象的IUser
类方法:
public toIUser():IUser {
return {
id: this.id,
name: this.name,
status: this.status
}
}
然后使用该函数简单地映射您的实例:
let allUsers = [JonSnow, AryaStark, SansaStark, JoffreyBaretheon].map(user => user.toIUser());
console.log("all users:", allUsers);
PS:我会avoid using static
variables作为你的解决方案。
答案 2 :(得分:0)
将静态User
变量声明为数组:
User.users = []
在User
构造函数中,将当前对象添加到数组中:
User.users.push(this)
然后在allUsers
中返回数组:
allUsers() {
return User.users
}