34 lines
1 KiB
JavaScript
34 lines
1 KiB
JavaScript
|
export const StringWrapper = function () {
|
||
|
const Class = Object.getPrototypeOf(this).constructor;
|
||
|
const Constructor = Function.bind.apply(String, [null, ...arguments]);
|
||
|
const instance = new Constructor();
|
||
|
Object.setPrototypeOf(instance, Class.prototype);
|
||
|
return instance;
|
||
|
};
|
||
|
StringWrapper.prototype = Object.create(String.prototype, {
|
||
|
constructor: {
|
||
|
value: StringWrapper,
|
||
|
enumerable: false,
|
||
|
writable: true,
|
||
|
configurable: true,
|
||
|
},
|
||
|
});
|
||
|
Object.setPrototypeOf(StringWrapper, String);
|
||
|
export class LazyJsonString extends StringWrapper {
|
||
|
deserializeJSON() {
|
||
|
return JSON.parse(super.toString());
|
||
|
}
|
||
|
toJSON() {
|
||
|
return super.toString();
|
||
|
}
|
||
|
static fromObject(object) {
|
||
|
if (object instanceof LazyJsonString) {
|
||
|
return object;
|
||
|
}
|
||
|
else if (object instanceof String || typeof object === "string") {
|
||
|
return new LazyJsonString(object);
|
||
|
}
|
||
|
return new LazyJsonString(JSON.stringify(object));
|
||
|
}
|
||
|
}
|