Can you make an object 'callable'?

No, but you can add properties onto a function, e.g.

function foo(){}
foo.myProperty = "whatever";

EDIT: to "make" an object callable, you'll still have to do the above, but it might look something like:

// Augments func with object's properties
function makeCallable(object, func){
    for(var prop in object){
        if(object.hasOwnProperty(prop)){
            func[prop] = object[prop];
        }
    }
}

And then you'd just use the "func" function instead of the object. Really all this method does is copy properties between two objects, but...it might help you.


Following the same line of @Max, but using ES6 extensions to Object to pass all properties and prototype of an object obj to the callable func.

Object.assign(func, obj);
Object.setPrototypeOf(func, Object.getPrototypeOf(obj));

ES6 has better solution for this now. If you create your objects in a different way (using class, extending 'Function' type), you can have a callable instance of it.

See also: How to extend Function with ES6 classes?

Tags:

Javascript