js中函数和对象重名 该怎么解释

遇到一段这样的代码
functionrequire(id){
.....
}
functionother(){
...
}
vark='plus';
require[k]=other;
console.log(require);//输出的是functionrequire(id){.....}
console.log(require.plus);//输出的是functionother(){...}
这种情况该怎么解释这个require呢?是函数呢还是普通对象呢?
我知道函数也是一种对象
芜湖不芜
浏览 699回答 2
2回答

森栏

简单来说就是函数具有普通对象的全部特性,你完全可以把它当做普通对象来用,但它还有自己的一些特点,例如它是可执行的、具有prototype属性等。JS内部在执行代码时如果遇到函数调用语句,例如foo(),它会判断foo是不是可执行的,如果不是将会报错。并不是像我们在JS代码中常做的那样判断foo是否是function对象。所以函数具有普通对象没有的特性。这里更正一下此楼评论里的一个结论:“这是因为function对象的toString()方法与普通对象的不同的缘故。”不好意思,当时没有看清楚你的问题,console.log(require)之所以没有打印'plus',并不是toString()方法重载的问题(因为{plus:...}.toString()原本也不会打印其中的属性),而是console.log函数的实现问题。之前可能对您有误导,抱歉~~~就此更正!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript