首先 先解释这三个属性:

  (1) prototype  : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象。(普通函数的该属性没有作用)

    作用:让每一个实例共享同一套方法。(prototype就是用来盛放所有的构造函数的实例的方法的,prototype属性上的所有内容都可以被构造函数的实例去调用)

  (2) __proto__  : 它是对象独有的,从一个对象指向一个对象。(即指向他们的原型对象,可以理解为父对象)

     作用:当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存在这个属性,则继续往父对象的__proto__属性所指向的那个对象(可以理解为爷爷对象)里找,如果还没找到,则继续往上找….直到原型链顶端null(可以理解为原始人。。。),此时若还没找到,则返回undefined(可以理解为,再往上就已经不是“人”的范畴了,找不到了,到此为止)。由以上这种通过__proto__属性来连接对象直到null的一条链即为我们所谓的原型链。

  (3)constructor : 它是对象独有的, 从一个对象指向一个对象。(即指向该对象的构造函数),每个对象都有构造函数。所有函数最终都是由Function()构造函数得来,所以constructor属性的终点就是Function()。

    注意:Function这个对象比较特殊,它的构造函数就是它自己(因为Function可以看成是一个函数,也可以是一个对象)。

  总结:

      ⑴ __proto__constructor属性是对象所独有的;

      ⑵ prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__constructor属性。(即只有函数有prototype属性,其余两个函数对象都有。)

      ⑶ constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function()。

Object、Array、Function 的关系:

  (1)  函数是一种对象。

  (2) 对象都是通过函数创建的

  (3) Object 是一切引用类型的父类,所有能被Object接收的均为对象(数组是一种对象)

引用数据类型:Object 、Array 、Function 、Data等。

有人说,Object类型相当于哺乳动物,Array相当于犬科动物,Function相当于猫科动物,他们分别是一种狗,一种猫,一种猪,一种鸭。他们彼此之间并无直接联系,但同属动物(引用类型)。

最新文章

  1. c 头文件<ctype.h>(二)
  2. 【转载】[C#]Log4net中的RollingFileAppender解析
  3. 数据字典生成工具之旅(6):NVelocity语法介绍及实例
  4. JS回车事件
  5. (剑指Offer)面试题16:反转链表
  6. adjtimex使用
  7. QT5.6 编译SQLServer驱动
  8. 深入了解C++中间mutablekeyword
  9. mysql 基本语法
  10. SharePoint 开发TimerJob 介绍
  11. mysql删除表中重复数据,只保留一个最小的id的记录
  12. .NET CORE学习笔记系列(6)——KestrelServer
  13. [Jenkins]IOS构建机配置记录
  14. React hooks实践
  15. Set接口HashSet实现类
  16. java----static关键字(包括final)
  17. fiddler工作原理和代理设置
  18. js不能拦截302
  19. 余玄相似度,TF-IDF
  20. Maven实战(九)Maven仓库简介

热门文章

  1. Rgb2Gray
  2. Java 中的 HttpServletRequest 和 HttpServletResponse 对象
  3. nginx反向代理转发apache配置 之 cookie去哪儿了?
  4. jmeter集合点使用方法:Synchronizing Timer
  5. IO流查找文件然后写入TXT文档
  6. 30 个java编程技巧
  7. String,StringBuffer与StringBuilder的理解
  8. PHP-CPP开发扩展(五)
  9. tls1.2 rfc5246
  10. rabbitMQ和对应的erlang版本匹配