ava
Version:
40 lines (32 loc) • 555 B
JavaScript
export default class ContextRef {
constructor() {
this.value = {};
}
get() {
return this.value;
}
set(newValue) {
this.value = newValue;
}
copy() {
return new LateBinding(this);
}
}
class LateBinding extends ContextRef {
constructor(ref) {
super();
this.ref = ref;
this.bound = false;
}
get() {
if (!this.bound) {
const value = this.ref.get();
this.set(value !== null && typeof value === 'object' ? {...value} : value);
}
return super.get();
}
set(newValue) {
this.bound = true;
super.set(newValue);
}
}