これにはプロトタイプを使用する必要はありません。より高いレベルで抽象化された共通の機能が必要な多くのインスタンスを作成しているわけではなく、tasks
オブジェクトにメソッドを追加するだけで済みます。
const tasks = {
start(key) {
const task = this[key]
// do stuff with task
}
}
// example call
tasks.start('123');
既存のキーとは衝突がありませんを確認する場合は、代わりにSymbolを使用することができます。
また、単に同様に、あなたのaddTask
関数に、これを行い、スタンドアロンの機能を持つことができます:あなたが間の衝突を心配する必要はありませんので、このスタンドアロン機能を持つ
function start(tasks, key) {
const task = tasks[key]
// do stuff with task
}
// example call
start(tasks, '123')
は、おそらく優れていますタスクキーとメソッド名。
また、この分離を行いラッパーオブジェクトを作成することができます。
const taskManager = {
tasks: {} // map of key to task
// methods
add(task) {
this.tasks[task.id] = task;
this.start(task.id);
}
start(key) {
const task = this.tasks[key];
// do stuff with task
}
}
// example usage
taskManager.start('123')
このアプローチの利点は、あなたの
tasks
がいる
tasks
があるべき範囲を絞る、それらに操作した容器内に封入されていることである
どのような関数がタスク上で使用されることが意図されているかを明確にする(プログラマーに示唆する)。
あなたが複数のタスクマネージャを持つことを計画している場合、使用した試作品は、ここでは意味をなさないかもしれません:
class TaskManager {
constructor() {
this.tasks = {} // map of key to task
}
// methods
add(task) {
this.tasks[task.id] = task;
this.start(task.id);
}
start(key) {
const task = this.tasks[key];
// do stuff with task
}
}
// example usage
new TaskManager().start('123')
コンストラクタ/ファクトリ関数が必要です。 – undefined