对JavaScript中原型及原型链的理解
什么是原型:
1,我们所创建的每一个函数,解析器都会向该函数对象添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象
2,如果我们将函数作为普通函数调用时,prototype基本没有任何作用;当函数作为构造函数使用时,构造函数所创建的对象中都会有一个隐含属性,这个隐含属性指向创建它的构建函数的原型对象(好像有点绕……),我们可以通过__proto__来访问该属性
3,原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象(我们可以将对象中共有的内容,统一设置到原型对象中)
使用方法或者属性时的一个内部查找顺序(有必要知晓):
(1)当访问一个对象的属性/方法时,首先查找这个对象自身有没有该属性
(2)如果没有就查找它的原型(也就是__proto__指向的构造函数prototype原型对象)
(3)如果还没有找到就查找原型对象的原型,就是prototype.__proto__,它应该是指向Object构造函数的原型对象-我理解为原型对象是由Obejct这个构造函数创建的
(4)依次类推,如果还没有,则它会查找Object构造函数原型的原型,也就是Object构造函数的prototype.__proto__,如果打印它,你会发现它是null
原型链:
ps:有没有觉得很像一个链条呢
总结:
我们这里需要重点知晓的是,原型对象也是对象,是对象就是用构造函数创建出来的,而最终他们都指向Object的构造函数的原型对象的原型对象,也就是null;事实上,我们可以把Object构造函数当做是一切对象的祖先(包括Function构造函数,它的__proto__也是指向Object),还需要知晓Js内部查找属性和方法的一个规则,熟知这些,那么理解原型和原型链就没什么难度了
嗯嗯……,写的好像有点乱,如果有大佬发现此文中的错误,可以指正出来,毕竟才接触前端没多久,只是个人对原型的一些总结和理解,如果后续有更深入的理解或有更简洁的描述,会再进行补充或修改
最新文章
- iOS 私有变量 私有方法
- 史上最全的 Redux 源码分析
- IDL中的HRESULT值
- webpack 插件: html-webpack-plugin
- codeforces 360 C - NP-Hard Problem
- 【转载】Serial NOR Flash and U-Boot
- python: shutil模块 -拷贝文件
- 玩转HTML5移动页面(动效篇)
- Eclipse设置保存时自动给变量加final
- mysql增量备份 percona-xtrabackup
- sql 添加字段备注和查看已添加表的备注
- php生成签名及验证签名
- RACSignal的Subscription深入
- SourceTree管理工具的一些使用总结
- Android为TV端助力 关于JNI的使用方法
- lua 特殊时间格式转换
- Linux-Centos7 安装图形界面
- Machine Learning in action --LogisticRegession 逻辑回归
- Jenkins 01——简介
- 测试开发之前端——No3.HTML5中的标准属性
热门文章
- 计算机视觉基本原理——RANSAC
- 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型
- SubLime Text3 常用插件总结
- 12c OCR corrupted results in CRS stack down.
- jdbc连接方法
- 高性能/并发的保证-Netty在Redisson的应用
- XSS编码问题的个人总结
- Linux命令后面加 &; 的作用
- IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频
- PTA | 1008 数组元素循环右移问题 (20分)