スタックとして動作するクラスを定義しました。要素をスタックにプッシュして元に戻したり、やり直したりすることができます。Vanilla JS:オブジェクトのプロパティを別のオブジェクトから追跡する方法は?
export default class Stack {
constructor() {
this.history = [];
this.pointer = -1;
}
push(element) {
this.pointer += 1;
if (this.pointer < this.history.length) { this.history.length = this.pointer; }
this.history.push(element);
}
undo() {
if (this.pointer >= 0) {
// undo element...
this.pointer -= 1;
}
}
redo() {
if (this.pointer < this.history.length - 1) {
this.pointer += 1;
// redo element...
}
}
isEmpty() {
return this.history.length === 0;
}
canUndo() {
return !(this.isEmpty() || this.pointer === -1);
}
canRedo() {
return !(this.isEmpty() || this.pointer === this.history.lenght - 1);
}
...
そしてIはStack
オブジェクトをインスタンス化undo
とredo
方法を使用するボタンが表示され、別のオブジェクトを持っています。しかし、私はそれらを初期化するとき、私はボタンを無効にすることができ
(私はこれを検証するためにStack
に方法canUndo
とcanRedo
を実装している)これらの操作を実行できないときにそれらを無効にする必要がありますが、私は方法がわかりませんスタックのプロパティが変更されるたびにcanUndo
とcanRedo
のメソッドを呼び出すことができます。そのため、これらのメソッドを無効にしたり有効にしたりできます。このための最良の方法は何でしょうか?
注:ボタンはキャンバスに描かれており、通常のHTML要素ではありません。私はES6とフレームワークなしこれを使用しています。