为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2019-04-19 16:29:56
遇到一段这样的代码functionrequire(id){.....}functionother(){...}vark='plus';require[k]=other;console.log(require);//输出的是functionrequire(id){.....}console.log(require.plus);//输出的是functionother(){...}这种情况该怎么解释这个require呢?是函数呢还是普通对象呢?我知道函数也是一种对象
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信