js获取类/方法的唯一字符串标识符

时间:2017-12-10 20:23:31

标签: javascript

我需要为一个可以用来识别它的类生成一个唯一的字符串,并且对于一个类总是相同的:

文件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,但重要的是标识符总是相同的,并且完全来自它描述的对象的结构。

1 个答案:

答案 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的类型错误。所以你需要事先做一个未定义的检查。