JSFiddle - React, Tailwind, and code Playground
by kassiomaia
JavaScript
function versionControlFactory() {
return Object.assign({}, {
_history: [],
saveProperty(prop, value) {
this._history.push({
at: new Date(),
prop,
value,
})
},
undo() {
var previous = this._history.pop()
if (previous) {
this['_' + previous.prop] = previous.value
}
}
})
}
function objectFactory(props) {
return Object.assign({}, props, versionControlFactory(), {
_name: '',
setName(value) {
this.saveProperty('name', this._name)
this._name = value;
},
getName() {
return this._name;
}
})
}
function particuleFactory() {
return objectFactory({
_position: [0, 0, 0],
setPosition(x, y, z) {
this.saveProperty('position', this._position);
this._position = [x, y, z];
},
getPosition() {
return this._position;
}
})
}
var genericObject = particuleFactory()
genericObject.setName("Generic Object")
genericObject.setName("Kássio Maia")
genericObject.setPosition(10, 20, 30)
genericObject.undo()
console.log(genericObject)