Skip to content

Instantly share code, notes, and snippets.

@arccoza
Last active March 20, 2024 15:12
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save arccoza/50fe61c8430fc97a463bf6b8960776ce to your computer and use it in GitHub Desktop.
Save arccoza/50fe61c8430fc97a463bf6b8960776ce to your computer and use it in GitHub Desktop.
JavaScript Callable Object using proxy
'use strict'
class Callable extends Function {
constructor() {
super()
return new Proxy(this, {
apply: (target, thisArg, args) => target._call(...args)
})
}
_call(...args) {
console.log(this, args)
}
}
@Kadeluxe
Copy link

It works! Very clean solution. Thank you.

@arccoza
Copy link
Author

arccoza commented Mar 12, 2021

No prob, there are other approaches to callable objects, have a look at the other gists, or this article.

@Kadeluxe
Copy link

Thanks for the link, it's a good read.

@jed
Copy link

jed commented Dec 29, 2023

you could also reuse the object itself!

class Callable extends Function {
  constructor() {
    super()    
    return new Proxy(this, this)
  }
  
  apply(...args) {
    console.log(this, args)
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment