I'd like to create a new object working like Date or Array in JavaScript, which can be called like a function Date(). Meanwhile, there are also other functions on it like Date.now() or Array.of(), which returns a new instance of this object.
How can I do that?
For example:
function Foo (lastName) {
    this.firstName = 'Foo'
    return this.firstName + ' ' + lastName
}
Foo('Bar') // 'Foo Bar'
Foo.setFirstName = function (firstName) {
    this.firstName = firstName
    /**
     * Here I want to return a new instance of Foo, with new firstName
     */
}
const foo = Foo.setFirstName('foo')
foo('bar') // 'foo bar'
 
     
    