我需要为一个可以用来识别它的类生成一个唯一的字符串,并且对于一个类总是相同的:
文件1:
class User {
gender
age
firstname
lastname
get fullname() {
return firstname + ' ' + lastname
}
}
文件2:
class User {
firstname
lastname
get fullname() {
return firstname + ' ' + lastname
}
}
我有一个函数,它根据类/方法名称生成一个标识符。
例如。 fullname
方法的标识符为User.fullname
。
不幸的是,这会产生冲突,因为User(文件1和2)的两个实现都会产生相同的标识符。
有没有办法让它们与众不同?我知道我可以添加一个随机数或uuid,但重要的是标识符总是相同的,并且完全来自它描述的对象的结构。
答案 0 :(得分:0)
您可以将这些类命名为:
class User {
constructor(gender, age, firstname, lastname) {
this.gender = gender;
this.age = age;
this.firstname = firstname;
this.lastname = lastname;
}
get fullname() {
return this.firstname + ' ' + this.lastname
}
}
然后你有另一个类:
class User2 {
constructor(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
get fullname() {
return this.firstname + ' ' + this.lastname
}
}
然后,您可以检查新创建的对象的名称,以确定它们是使用User1还是User2创建的:
var user1 = new User('male', 21 'John', 'Smith');
var user2 = new User2('John', 'Smith');
console.log(user1.constructor.name); // User
console.log(user2.constructor.name); // User2
您甚至可以使用instanceof
检查创建的对象是否来自您期望的类:
console.log(user1 instanceof User) // true
console.log(user2 instanceof User) // false
通过这种方式,您可以按上述方法进行检查,而无需存储某种类型的类标识符,并且可以保持方法名称相同。
这一点的一个重要注意事项是,如果对象未定义,则会出现.constructor.name
的类型错误。所以你需要事先做一个未定义的检查。