| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JS基于原型链的继承和基于类的继承学习总结 -> 正文阅读 |
|
[JavaScript知识库]JS基于原型链的继承和基于类的继承学习总结 |
1.?new关键字创建一个对象的过程? ?(1) 创建一个空的简单对象(即{}) (2)为步骤1新创建的对象添加属性_proto_,该属性连接至构造函数的原型对象 (3)将步骤1新创建的对象作为this的上下文 (4)执行new出来的对象指向的函数,如果该函数没有返回对象,则返回this 示例代码如下:
foo就是我们new出来的对象,它的_proto_指向的就是Bar这个函数,因为Bar函数没有返回值,因此this指向的是new出来的这个对象本身。 2. 基于原型链的继承2.1 原型链的作用? 个人理解的是,原型链可以帮我们理清楚哪些属性是new出来的对象本身所拥有的,哪些属性是new出来的这个对象通过继承的方式得来的,从而对对象有更清晰的认识,更灵活的使用对象。 对于javaScript的绝大多数对象来说,它们最终的原型都是Object。 2.2 _proto_与prototype 原型链的链接过程也可以称为继承。当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object)都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。 我们通过一个例子来说明_proto_与prototype之间的关系: _proto_是对象A的属性,该属性可以将对象追溯到其构造函数对应的上级原型对象B.prototype上。上级原型B的构造函数自带prototype属性,该属性是一个指针,用于指向该构造函数对应的父级原型对象C。因此prototype.xxx就代表对象C上的一个属性。一般没声明的话prototype指向的就是空。 因此,_proto_与prototype之间的关系为: A._proto_ = B.prototype A._proto_._proto_ = B.prototype._proto_ = C.prototype prototype起着一个连接上下文的作用,帮助对象把整个原型链接起来。 2.3 原型链示例
2.4 原型链特性:属性遮蔽 原型链中的属性遮蔽指的是:以上述代码为例,如果对象O拥有一个名为a的属性,而函数f的原型上也拥有一个名为a的属性,那我们在访问O.a的属性值时,是以哪一个值为准?因为原型链的回溯是自底向上,从O开始的。因此当O拥有要访问的a属性时,就不需要继续向上遍历了。因此函数f的原型上的那个名为a的属性就不会被遍历到。这就叫做属性遮蔽 2.5 经典面试题
问f拥有a和b哪个属性? 通过在浏览器控制台输出,可以得出结论,只拥有a这一个属性。 ? 因为f._proto_指向的是一个对象而不是Function,而Object的上一级原型也是Object,该Object的prototype有a属性,所以f只拥有a属性 3. 基于类的继承基于类的继承其实也是基于原型链的继承的语法糖,是在ES6阶段提出的新概念。个人认为,基于类的继承把原型链的过程描述的更清晰:
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:11:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |