函数和对象的关系 上文(一切都是对象)已经提到,函数就是对象的一种,通过instanceof函数就可以判断。
var fn = function(){};
document.writeln(fn instanceof Object);//true
函数是一种对象,但是函数却不像数组一样,你可以说数组是对象的一种,因为数组就像是对象的一个子集一样。但是函数和对象之间,却不仅仅是一种包含和被包含的关系,函数和对象之间的关系比较复杂,甚至有一点鸡生蛋蛋生鸡的逻辑。 还是先看一个小例子吧:
function Fn(){
this.name ="nihao";
this.age = 23;
}
var fn1 = new Fn();
上面的例子很简单,它能说明:对象可以通过函数来创建的,对!也只能说明这一点。
对象都是通过函数创建的
var obj = {a:10,b:'nihao'};
var arr = [5,true,'string'];
如上创建的对象是通过快捷方式创建,在编程语言中,一般叫做“语法糖”; 言归正传,其实以上代码的本质是:
var obj = new Object();
obj.a = 10;
obj.b="nihao";
var arr = new Array();
arr[0] = 5;
arr[1] = false;
arr[2] = 'string';
而其中的Object 和 Array都是函数。
console.log(typeof (Object));// function
console.log(typeof (Array));// function
所以对象都是通过函数创建的。
现在是不是有点晕了,对象是函数创建的,而函数却又是一种对象。函数和对象到底是什么关系? 如果想知道为什么?还得了解prototype (原型)的概念。