所以我一直在研究工厂函数和类,寻找创建多个对象的最优化方法,每个对象都有几个函数/操作。
假设我正在做一个TODO列表,我创建的每个任务都有7个参数,甚至更多的操作,但主要是getter和setter。
如果我使用一个工厂函数创建这些任务中的每一个,那么每个创建的对象在内存中都会为每个创建的任务有将近十几个函数,对吧?
既然我们有Object.create()
来创建一个对象作为另一个对象的原型,那么将taskOperations
分离为一个独立的对象并像我下面所做的那样使用Object.create(taskOperations)
来避免为所有创建的对象使用相同的函数堵塞内存会更好吗?
这是最优化的方式,还是使用类更有效?
const taskOperations = {
getTitle() {
return this.title;
},
setTitle(title) {
this.title = title;
},
getDateCreated() {
return this.dateCreated;
},
setDateDue(dateDue) {
this.dateDue = dateDue;
},
getDateDue() {
return this.dateDue;
},
setPriority(priority) {
this.priority = priority;
},
getPriority() {
return this.priority;
},
};
// Task factory
const createTask = (title) => {
let task = Object.create(taskOperations);
task.title= title;
task.dateCreated= new Date();
task.dateDue= "";
task.priority= false;
task.note= "";
task.done= false;
task.projectID= 0;
return task
};
建议书
您当前关注的是在不同的对象上复制多个类似的函数,因为这会增加内存使用量。
我们可以利用所使用的语言类型,即口译和几乎没有"语言"的空间;真实的";数据封装。
在Javascript中,一切都是";"公共";或可访问,即没有数据封装,因此对象属性足以访问/更改对象的状态(即,对于具有setter/getter的地方,例如setTitle
和getTitle
(。
对于更复杂的操作,并且为了减少多个类似函数的内存开销;"singleton";service(我在这里使用了引号,因为这或多或少是你应用它的方式,不希望因为你使用的语言类型而限制它(类,该类具有方法或预期操作。然后,每个方法都将接受task
对象和执行操作所需的任何其他细节,并在必要时更新任务的相应状态。这意味着对于内存中的15000个task
,您将不再需要15000 * [num of task operations]
。
这可能看起来像(同样,这个实现实际上是语法糖和基于决策的(:
const TaskService = {
getTitle(task) {
return task.title;
},
setTitle(task,title) {
task.title = title;
},
getDateCreated(task) {
return task.dateCreated;
},
setDateDue(task,dateDue) {
task.dateDue = dateDue;
},
getDateDue(task) {
return task.dateDue;
},
setPriority(task,priority) {
task.priority = priority;
},
getPriority(task) {
return task.priority;
},
};
无论是否为类,我们的想法都是尽可能地将关注点分开,即保持类的简单,我们可以有仅用于存储状态的类(例如,您在工厂中创建对象的位置(和允许我们执行不同操作的类。
我希望这有助于决策过程。有许多软件设计和反设计模式。
进一步阅读
很多关于设计模式的文献通常引用类型化语言(如Java、C#等(,但我希望这也能对有所帮助
第-条https://www.toptal.com/javascript/comprehensive-guide-javascript-design-patterns创建Javascript对象的其他方法-哪种方法最适合在Javascript中创建对象?在对象属性之前是否需要"var"?