JSFiddle - React, Tailwind, and code Playground

JavaScript

class ExtendedFunction extends Function {

	// Arbitrary private properties
  #foo
  #baz() { return this.#foo + 'qux' }
  
  // The thing that happens when you call your extended function
  // context is optional if you want access to the `this` 
  // provides to your extended function at call time
  #execute() {
    // Arbitrary code that can call anything in closure here
    return this.#baz()
  }
  
  constructor(a) {
    // Set `this` to simple wrapper function
    // that takes another function and returns its value
    // Use super we get an instance of Function and ExtendedFucntion
    super('execute', 'return execute()')
  	this.#foo = a
    // Bind our arbitrary function to the current `this`
    // allowing it to access private properties even when passed around
    const boundExecute = this.#execute.bind(this)
    // Bind the simple wrapper and the boundExecute together and return that
    // When called our extended function will do whatever is in #execute
    var self = this.bind(null, boundExecute)
    return self
  }

}

const a = new ExtendedFunction(256)
console.log(a instanceof Function) // true
console.log(a instanceof ExtendedFunction) // true
console.log(a()) // 256qux