0
プロパティをクラスに設定する前に検証する必要があります。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 instance2 = new SetterDemo({prop1: null});
:
let instance1 = new SetterDemo({prop1: 'abc'});
instance1.prop1 = null; //Throws error. Good. Just like I want it to.
をしかし、私はこれを行うとき、
エラーをスローせずにインスタンスを作成しています。 "prop1"が無効なので、エラーをスローするようにします。そのprop1のセッターメソッドがコンストラクターで呼び出されていないようです。コンストラクタで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の外部検証は完全にうまく、一貫性があります。あなたのバグは、コンストラクタでセッターをバイパスしているということです。 –
@AluanHaddad、あなたのコメントは私が探していたものです。それは私の心を越えましたが、私は確信が持たれておらず、実験していましたが、現在は期待どおりに働いています。ありがとうございました。私はそれを正しいものとして受け入れることができるように、あなたのコメントを回答として投稿してください。 –