// Function function extend(obj) { class Extended extends obj.constructor { constructor(obj) { super(...(Array.isArray(obj) ? obj : [obj])); this.$ = 'something'; } } return new Extended(obj); } // Examples const originalString = 'test'; const extendedString = extend(originalString); String(extendedString) === originalString extendedString.toString() extendedString.valueOf() extendedString.$ extendedString.constructor.prototype const originalArray = [4, 5, 6]; const extendedArray = extend(originalArray); JSON.stringify(extendedArray) === JSON.stringify(originalArray) extendedArray.push(7) extendedArray.valueOf() extendedArray.toString() extendedArray.$