之前说过函数也是对象,也是若干属性的集合,那为什么用tyoeof操作符打印输出的却是function,而不是object呢?
函数与对象之间的关系是怎么样呢?
诚然,按照我们之前的理解,函数是对象的一种是没有错的,数组也是对象的一种,但是它跟数组却有一点不同,数组我们可以理解成是对象的一个子集,或者是一种变形:
var person = {name:"oyakuki",age:20,say:function(){console.log(this.name + "is saying")}};
var arr = ["a","b","c","d"];
我们可以把数组想想成下面的格式:
var arr = [0:"a",1:"b",2:c,3:"d"];
事实上,在es6中有一个foreach语法,我们通过数组的index,就可以访问到其value。
但是函数跟对象之间的关系却是很复杂的,不像数组和对象之间的关系比较简单;
function Foo(){
this.name = "oyakuki";
this.age = 20;
}
var fn = new Foo();
console.log(typeof fn); //object
上面的代码中,fn是通过构造函数出来的,并且typeof打印出来的值是object,这说明对象可以通过函数创建出来。
但是我要说的是:对象都是通过函数创建的,可能有人会反驳,因为
var person = {name:"oyakuki",age:20,say:function(){console.log(this.name + "is saying")}};
var arr = ["a","b","c","d"];
但这其实是创建object对象和数组的两外一种写法而已,我们称之为字面量表示法;
另外一种写法是:
var person = new Object();
person.name = "oyakuki";
person.age = 20;
var arr = new Array();
arr[0] = "a";
arr[1] = "b";
arr[2] = "c";
arr[3] = "d";
而Object 和Array 都是函数,所以说:对象都是通过函数创建的。
那么函数和对象之间的关系到底是什么呢?
理清他们之间的关系,需要了解另外一个概念prototype原型。
网友评论