函数与对象的关系?

2017-05-10  本文已影响0人  oyakuki

之前说过函数也是对象,也是若干属性的集合,那为什么用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原型

上一篇 下一篇

猜你喜欢

热点阅读