Можно ли сделать из объекта функцию?
Можно ли после создания объекта, сделать его "вызываемым", как функцию?
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'