上一节中有个问题:
typeof数组的时候,输出object;typeof函数的时候,却输出function,为什么不是输出object?函数不是也是对象嘛?
(数组可以看做对象的一个子集,但函数不行,往下看)
一、函数是对象
console.log(function fn(){} instanceof Object);//true
从上述代码中,看出函数是对象。但是对象呢?对象是怎么产生的呢?大家都知道对象是new 构造函数创造出来的,也就是对象是由函数生成的。啥?
函数是对象,对象又是有函数生成的。那到底先有的谁?似乎跟鸡生蛋还是蛋生鸡一个逻辑。
二、对象是由函数生成的
var obj = new Object();
obj.name = '张三';
obj.age = 12;
console.log(obj instanceof Object);//true
console.log(typeof Object);//function
从上述代码看出,obj是对象,是由Object生成的,但是Object是个函数。所以说,对象是由函数生成的。
三、函数与对象的关系
函数与对象的关系不简单,你中有我,我中有你。不像数组,只是对象的一个子集。真正理解两者的关系,那必须理解掌握prototype。