====== Аналог __call в JavaScript (Proxy Object) ====== ===== обработчик get ===== Аналог функции __call можно создать через Proxy объект ES6, а делается это следующим способом. function DeviantObject(props) { const exports = Object.freeze({ __call(name, args) { return {name, args} }, }) return new Proxy(exports, { get: (target, name) => (...args) => { // const args = Array.prototype.slice.call(arguments) return target.__call(name, args) } }) } const obj = DeviantObject(); console.log(obj.foo('bar')); Вернёт в консоль {name: 'foo', args: Array(1)} ===== И вот ещё интересно поигрался с set ===== function DeviantObject(props) { const locals = { name: "Untitled", } const exports = Object.freeze({ __call(name, args) { if (name === "dump") { return locals } return {name, args} }, }) return new Proxy(exports, { get: (target, name) => (...args) => { //const args = Array.prototype.slice.call(arguments) return target.__call(name, args) }, set: (target, name, value) => locals[name] = value, }) } const obj = DeviantObject(); console.log(obj.dump()); obj.name = "Eugene"; obj.age = 18; console.log(obj.dump()); Результат выполнения {name: 'Untitled'} {name: 'Eugene', age: 18}