遇到一段这样的代码
function require(id){
.....
}
function other(){
...
}
var k='plus';
require[k]=other;
console.log(require);//输出的是function require(id){.....}
console.log(require.plus);//输出的是function other(){...}
这种情况 该怎么解释 这个require呢? 是函数呢还是普通对象呢?
我知道函数也是一种对象
简单来说就是函数具有普通对象的全部特性,你完全可以把它当做普通对象来用,但它还有自己的一些特点,例如它是可执行的、具有
prototype
属性等。JS
内部在执行代码时如果遇到函数调用语句,例如foo()
,它会判断foo
是不是可执行的,如果不是将会报错。并不是像我们在JS
代码中常做的那样判断foo
是否是function
对象。所以函数具有普通对象没有的特性。这里更正一下此楼评论里的一个结论:“这是因为
function
对象的toString()
方法与普通对象的不同的缘故。”不好意思,当时没有看清楚你的问题,
console.log(require)
之所以没有打印'plus',并不是toString()
方法重载的问题(因为{plus:...}.toString()
原本也不会打印其中的属性),而是console.log
函数的实现问题。之前可能对您有误导,抱歉~~~就此更正!