0
我需要在將它們設置到我的課程之前驗證屬性。我已經定義爲類中的每個屬性的setter方法,如下圖所示:es6類中的屬性驗證
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方法和構造函數中使用通用的驗證器函數?
注:我已經嘗試在我的類之外創建一些驗證器函數,並在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;
}
}
'else if(value.prop1 === null){throw「Err。」; }'我想你需要添加這個 – Jai
這條線是問題:'this.document.prop1 = document.prop1;'它需要'this.prop1 = document.prop1;'。 FWIW外部驗證是完全正確的,只是一致。你的錯誤在於你正在構造函數中繞過setter。 –
@AluanHaddad,你的評論是我一直在尋找的。它已經過了我的想法,但我不確定,並正在嘗試,現在它按預期工作。謝謝。請發表您的評論作爲答案,以便我可以接受它作爲正確的答案。 –