const mind = (() => {
function wrap(array) {
return new Proxy(array, {
set(target, propName, value, receiver) {
beforeChange(target, propName, value, receiver);
const result = Reflect.set(target, propName, value);
afterChange(target, propName, value, receiver);
return result;
}
// ...you may want other traps here...
});
}
function beforeChange(target, name, value, receiver) {
console.log("beforeChange", name, value);
}
function afterChange(target, name, value, receiver) {
console.log("afterChange", name, value);
}
let queries = wrap([]);
let actions = wrap([]);
return {
get queries() {
return queries;
},
set queries(value) {
beforeChange(queries, "*queries*", value);
queries = wrap(value);
afterChange(queries, "*queries*", value);
},
get actions() {
return queries;
},
set queries(value) {
beforeChange(queries, "*actions*", value);
queries = wrap(value);
afterChange(queries, "*actions*", value);
}
};
})();
mind.queries.push(1);
mind.actions.push("two");
console.log(mind.actions);
mind.actions[0] = "TWO";
console.log(mind.actions);
mind.queries = [];
mind.queries[10] = "ten";
console.log(mind.queries);
.as-console-wrapper {
max-height: 100% !important;
}