我去!JS的原型是咋回事?

最近写公司的项目,写着写着发现自己的原型的理解还是不够透彻,又去网上查了一番资料,顺便总结一下,在顺便给到的朋友能提供一点帮助。如有遗漏,欢迎交流。

  • 原型是啥?为什么要用原型?

原型就是 prototype 这个对象,在Js里 函数会存在这个对象,实例对象是木有的,比如a数组就木有 看图:

那为什么只有函数会有prototype呢?个人理解,有错勿喷

在JS里只有创建函数的时候,会自动添加一个prototype属性,函数是一个构造器,如果你去new 一个 实例对象的话。会报错 如图:

也就是说当你创建函数时,JS会为这个函数自动添加prototype属性,值是一个有 constructor 属性的对象,不是空对象。而一旦你把这个函数当作构造函数(constructor)调用(即通过new关键字调用),那么JS就会帮你创建该构造函数的实例,实例继承构造函数prototype的所有属性和方法(实例通过设置自己的__proto__指向承构造函数的prototype来实现这种继承)。

所以原型的作用就是用来继承的。

  • Funtion 和 Object的关系

函数在JS里是一等公民,最牛逼的那个。模拟的class类 就是通过构造函数来实现的,但函数也是一个对象,而Object其实也是一个构造函数。如图:

这是为什么呢?

Function.__proto__ // 一个构造函数
Object._proto_ 也是一个函数
但是 Function.__proto__.__proto__ 指向了object原型 所以instanceof 都是true

Function 的隐士原型指向了Object 从而继承了 object的一些方法 也是对象的一个实例而已,但是object的构造函数 function Object 的隐士原型 又指向了函数的prototype 形成一个闭环。所以 函数也是对象,而对象又依赖于函数

最新文章

  1. 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
  2. Atitit 深入了解UUID含义是通用唯一识别码 (Universally Unique Identifier),
  3. Linux 脚本 sh 和 ./ 的区别
  4. C#加载dll 创建类对象
  5. Visual studio 2015程序转Eclipse gun编译出现的问题总结
  6. Sql Server2000,2005,2008各版本主要区别
  7. Apache Ant在Windows下配置环境变量
  8. CEOI2004锯木厂选址
  9. .net 异步编程async & await关键字的思考
  10. java里的堆内存于栈内存的区别
  11. maven的安装教程
  12. Mina的IoBuffer改造成Netty的ByteBuff
  13. 如何将一段文本编译成C#内存程序的过程
  14. (小技巧)Sql server查看sql语句的执行时间(转)
  15. URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)
  16. server2008远程开端口的方法
  17. 2013长春网赛 1006 hdu 4764 Stone(巴什博弈)
  18. 机器学习入门-交叉验证选择参数(数据切分)train_test_split(under_x, under_y, test_size, random_state), (交叉验证的数据切分)KFold, recall_score(召回率)
  19. 【LeetCode】133. Clone Graph (3 solutions)
  20. CentOS 6.9升级GCC至7.3.0版本

热门文章

  1. HR招聘_(九)_招聘方法论(面试环节·薪资谈判和心理把控)
  2. SQL中null比较的雷区
  3. 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群
  4. 自己动手写js分享插件 [支持https] (QQ空间,微信,新浪微博。。。)
  5. 链表源代码(C语言实现)
  6. idea 项目热部署设置
  7. Django中blank和NULL
  8. C89标准库函数手册
  9. Python学习之路3☞编程风格
  10. 【UTR #1】ydc的大树