Можно ли сделать из объекта функцию?

Можно ли после создания объекта, сделать его "вызываемым", как функцию?

const obj = {}
// какие-то манипуляции
obj()

Не то чтобы я собрался это как-то применять, но интересны сама возможность и методы с помощью которых этого можно достичь.

И если нельзя, то почему?


Ответы (2 шт):

Автор решения: Grundy

Это сделать невозможно.

Чтобы объект был вызываемым, необходимо, чтобы у него был внутренний метод [[Call]].

Так как данный метод относится к внутренним, его невозможно изменить/добавить непосредственно из скрипта.

→ Ссылка
Автор решения: Трипольский Пётр

Разве что, создав новую ссылку

const obj = {
  foo: 'bar',
};

const fn = () => console.log('baz')

Object.setPrototypeOf(fn, obj)

fn() // 'baz'
console.log(fn.foo) // 'bar'
→ Ссылка