NosqlデータベースからこのJsonオブジェクトを取得するhttpリクエストがあります。
let jsonBody = {
birthday : 1997,
firstname: 'foo',
lastname:'bar'
}
次に、この情報をStudentモデルにロードします。
class Student{
constructor(){
}
getFullname(){
return this.lastname+' '+this.firstname
}
getApproxAge(){
return 2018- this.birthday
}
}
通常、このクラスにこのメソッドを追加します。
fromJson(json){
this.studentId = json.studentId;
this.birthday = json.birthday;
this.firstname = json.firstname;
this.lastname = json.lastname;
}
私はそれを次のように使用します:
let student = new Student()
student.fromJson(jsonBody)
console.log(student.getFullname())
console.log(student.getApproxAge())
これは正常に機能しますが、私の問題は次のとおりです。 fromJsonメソッドですべてのプロパティを1つずつ記述する必要がありますか?
また、所有権の名前が変更された場合、たとえば、lastnameがLastNameになった場合、それを修正する必要がありますか?
これらの値をオブジェクトStudentに動的に割り当てるだけで、そのメソッドをすべて保持する簡単な方法はありますか?
このようなもの:
fromJson(json){
this = Object.assign(this, json) //THIS IS NOT WORKING
}
インスタンスに割り当てるだけです:
static from(json){
return Object.assign(new Student(), json);
}
だからあなたはできる:
const student = Student.from({ name: "whatever" });
または、インスタンスメソッドにして、担当者を除外します。
applyData(json) {
Object.assign(this, json);
}
だからあなたはできる:
const student = new Student;
student.applyData({ name: "whatever" });
また、コンストラクタの一部にすることもできます。
constructor(options = {}) {
Object.assign(this, options);
}
それからあなたはすることができます:
const student = new Student({ name: "whatever" });
また、プロパティ名が変更された場合、たとえば、lastnameがLastNameになった場合、それを修正する必要がありますか?
はい、それを修正する必要があります。