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