函数与对象的关系?

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 看完《如果站在其他人的角度,你会带他们会不一样么?》的视频,就深刻的感受到每个人都有自己的过往和立场,我们没有切身...
    暖白开阅读 234评论 0 0
  • 看透了,就没有文学了。我是这么觉得的。以前写小说,所有的教材和教科书上都是这么说的,要了解人,要了解人。我一直沿着...
    李一十八阅读 222评论 0 0