我一直在研究在 Node.JS 应用程序中处理模型的类似 ORM 的方法,我对它的工作方式感到满意;但是,我想知道是否有更好的方法来处理重置构造函数的原型。我想要的行为是这样的:function Person(data) { for (const key in data) { this[key] = data[key] }}// setting methods and so on herePerson.findAll() // returns a list of all persons from the dbPerson.findOne(id) // returns a person at that IDconst self = new Person(data) // creating a person objectself.save() // saves that object in the dbself.update(data) // updates person objectself.addFriend(id) // creates a record adding the given id as a friend构造函数上有一些方法Person可以访问所有Person记录,而每个实例Person都有只影响该记录的方法。我是这样管理的:const utils = (tablename) => ({ findAll: () => dbHandler(`SELECT * FROM ${tablename}`), findOne: id => dbHandler(`SELECT * FROM ${tablename} WHERE id = $1`, [id]), // etc})Object.setPrototypeOf(Person, utils('people'));.setPrototypeOf不是最好的使用方法;它的性能不是特别好。我想知道是否有更好的方法来处理这样的用例——例如,es6 类规范中是否有任何内容可以处理这个问题?(扩展类是不太什么我要找的,之间的区别Person.findAll()和self.update(data)对我很重要,我希望UTIL方法是在构造函数本身。)编辑:在下面向贝尔吉大喊解决方案(“只需使用Object.assign”)......这是一个小演示:const dbHandler = (string, arr) => console.log(string, arr)function Person(data) { for (const key in data) { this[key] = data[key] }}const utils = (tablename) => ({ findAll: () => dbHandler(`SELECT * FROM ${tablename}`), findOne: id => dbHandler(`SELECT * FROM ${tablename} WHERE id = $1`, [id]), // etc})Object.assign(Person, utils('people'));Person.prototype.save = function() { console.log(`Saving person with data ${JSON.stringify(this)} to a totally real database`)}Person.findAll()Person.findOne(1)const self = new Person({ name: 'j', class: 'wizard'})self.save()
添加回答
举报
0/150
提交
取消