属性 es6 中的验证 类
Property validation in es6 classes
我需要先验证属性,然后再在我的 class 中设置它们。我已经为 class 中的每个 属性 定义了 setter 方法,如下所示:
class SetterDemo {
constructor(document) {
this.document = {
_type: 'SetterDemo'
};
this.document.prop1 = document.prop1;
}
get prop1() {
return this.document.prop1;
}
set prop1(value) {
//validating data. This is just an example. My validations will be a lot complex
if (!value) {
throw 'Invalid data';
}
this.document.prop1 = value;
}
}
只要我这样做就可以很好地工作:
let instance1 = new SetterDemo({prop1: 'abc'});
instance1.prop1 = null; //Throws error. Good. Just like I want it to.
但是当我这样做时:
let instance2 = new SetterDemo({prop1: null});
它正在创建一个没有抛出错误的实例。我希望它抛出错误,因为 "prop1" 无效。似乎没有在构造函数中调用 prop1 的 setter 方法。有没有办法在构造函数中使用 setter 方法?或者有没有一种方法可以在我的 setter 方法和构造函数中使用通用验证器函数?
注意: 我尝试在 class 之外创建一些验证器函数,并在 setter 和构造函数中使用它们。这就像我想要的那样工作,但它似乎不是正确的方法。这是它的代码:
class SetterDemo {
constructor(document) {
this.document = {
_type: 'SetterDemo'
};
if (!validateProp1(document.prop1)) {
throw 'Invalid data';
}
this.document.prop1 = document.prop1;
}
get prop1() {
return this.document.prop1;
}
set prop1(value) {
if (!validateProp1(value)) {
throw 'Invalid data';
}
this.document.prop1 = value;
}
}
module.exports = SetterDemo;
// -- Private Functions -- //
//validator function for prop1
function validateProp1(value) {
if (!value) {
return false;
} else {
return true;
}
}
问题出在这一行
this.document.prop1 = document.prop1;
它需要改为
this.prop1 = document.prop1;
发生的事情是您绕过了构造函数中的 setter。
我需要先验证属性,然后再在我的 class 中设置它们。我已经为 class 中的每个 属性 定义了 setter 方法,如下所示:
class SetterDemo {
constructor(document) {
this.document = {
_type: 'SetterDemo'
};
this.document.prop1 = document.prop1;
}
get prop1() {
return this.document.prop1;
}
set prop1(value) {
//validating data. This is just an example. My validations will be a lot complex
if (!value) {
throw 'Invalid data';
}
this.document.prop1 = value;
}
}
只要我这样做就可以很好地工作:
let instance1 = new SetterDemo({prop1: 'abc'});
instance1.prop1 = null; //Throws error. Good. Just like I want it to.
但是当我这样做时:
let instance2 = new SetterDemo({prop1: null});
它正在创建一个没有抛出错误的实例。我希望它抛出错误,因为 "prop1" 无效。似乎没有在构造函数中调用 prop1 的 setter 方法。有没有办法在构造函数中使用 setter 方法?或者有没有一种方法可以在我的 setter 方法和构造函数中使用通用验证器函数?
注意: 我尝试在 class 之外创建一些验证器函数,并在 setter 和构造函数中使用它们。这就像我想要的那样工作,但它似乎不是正确的方法。这是它的代码:
class SetterDemo {
constructor(document) {
this.document = {
_type: 'SetterDemo'
};
if (!validateProp1(document.prop1)) {
throw 'Invalid data';
}
this.document.prop1 = document.prop1;
}
get prop1() {
return this.document.prop1;
}
set prop1(value) {
if (!validateProp1(value)) {
throw 'Invalid data';
}
this.document.prop1 = value;
}
}
module.exports = SetterDemo;
// -- Private Functions -- //
//validator function for prop1
function validateProp1(value) {
if (!value) {
return false;
} else {
return true;
}
}
问题出在这一行
this.document.prop1 = document.prop1;
它需要改为
this.prop1 = document.prop1;
发生的事情是您绕过了构造函数中的 setter。