遇到一段这样的代码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函数的实现问题。之前可能对您有误导,抱歉~~~就此更正!
添加回答
举报
0/150
提交
取消