考虑下面的一段代码。
导出的类型是function。但我们仍然可以拥有exports.hello财产。这怎么可能??
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);
Run Code Online (Sandbox Code Playgroud)
输出是:
type of obj => object #### type of obj.exports => function #### obj.exporst.hello() is function
Run Code Online (Sandbox Code Playgroud)
拥有一个exports对象 ( typeof 'object') 并拥有诸如exports.hello,exports.foo等函数是合乎逻辑的。但是我们如何将自己导出为函数,然后拥有导出的属性呢?
根据MDN 文档
在 JavaScript 中,函数是
first-class objects,因为它们可以像任何其他object. 它们与其他的区别objects在于可以调用函数。简而言之,它们是Function对象。
这足以解释为什么你可以拥有一个函数的属性
在函数对象的属性和方法上检查此链接
总结 MDN 文档说明的内容
全局
Function object没有自己的方法或属性。但是,由于它本身是一个函数,所以它确实通过原型链从 继承了一些方法和属性Function.prototype。
总之一个 function is an instance of an Object
function myName() {
console.log('myName')
}
console.log(myName instanceof Object);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |