Consider the piece of code below.
The type of exports is function. But we can still have exports.hello
property. How is that possible??
const obj = {
exports: {}
}
obj.exports = () => {
console.log('invoked')
}
obj.exports.hello = () => {
console.log('hello() invoked')
}
var output = `type of obj => ${typeof obj} ####
type of obj.exports => ${typeof obj.exports} ####
obj.exporst.hello() is ${typeof obj.exports.hello}
`;
console.log(output);
The output is:
type of obj => object #### type of obj.exports => function #### obj.exporst.hello() is function
It is logical to have an exports
object (typeof 'object'
) and have functions like exports.hello
, exports.foo
, etc. But how can we have exports itself as function and then have properties of exports?
According to MDN documentation
In JavaScript, functions are
first-class objects
, because they can have properties and methods just like any otherobject
. What distinguishes them from otherobjects
is that functions can be called. In brief, they areFunction
objects.
And this is self sufficient to explain why you can have properties of a function
Check this link on the properties and method of function objects
to Summarize what the MDN documentation state
The global
Function object
has no methods or properties of its own. However, since it is a function itself, it does inherit some methods and properties through the prototype chain fromFunction.prototype
.
In short a function is an instance of an Object
function myName() {
console.log('myName')
}
console.log(myName instanceof Object);
Functions are Objects. Anything you can do to an Object, you can do to a Function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With