Сообщение от Alexandroppolus
|
На случай, если прилетит объектная обертка, для которой typeof будет 'object'
|
На самом деле на случай, когда будет передана примитивная строка.
На самом же деле можно всё проще сделать: например, возраст можно рассматривать как тип Age, который является подмножеством Number. Тоже самое с именем, тип Name является подмножеством типа String. Т. е. не каждое число является возрастом, но любой возраст является числом!
Вот, наверное, самый лучший вариант...
class Age extends Number {
constructor(age) {
super(age);
if(super.constructor.isNaN(this) || this < 0 || this > 150)
throw new TypeError("Invalid age");
}
}
class Name extends String {
constructor(name) {
super(name);
if(this.length < 3 || this.length > 20 || !/^[a-zçéäëïöü'’‘–—-]{3,20}$/i.test(this))
throw new TypeError("Invalid name");
}
}
class Person {
constructor(firstName, lastName, age) {
this.firstName = new Name(firstName);
this.lastName = new Name(lastName);
this.age = new Age(age);
Object.freeze(this);
}
}
Сообщение от Alexandroppolus
|
Пока что [new.target] мало поддерживается браузерами.
|
на самом деле поддерживается
очень хорошо!