文章目录

  • 一 原型搜索机制
    • 1.1 代码实现
    • 1.2 结构图解
    • 1.3 搜索机制
  • 二 原型链代码实现
    • 2.1 代码实现
    • 2.2 结构图解
    • 2.3 链条拓展
  • 三 原型链的缺点

原型链是实现继承的一种方式,扩展了原型搜索机制,使搜索可以继承向上,搜索原型的原型。

一 原型搜索机制

在原型搜索机制中,构造函数,实例,和原型对象的关系为,原型对象是构造函数的一个属性prototype,原型对象中有一个属性constructor指回构造函数,构造函数生成的实例中具有指针指向构造函数上的原型对象。

1.1 代码实现

// 构造函数
function person(name, color){this.name = name;this.color = color;
}
// 向默认的原型对象中添加值
person.prototype.getColor = function(){return this.color;
}
// 通过构造函数构建实例 实例中含有指向原型对象的指针
var personOne = new person("tom", "red");console.log("来自构造函数中的属性", personOne.name) // "tom"
console.log("来自原型对象中的属性", personOne.getColor()) // "red"

1.2 结构图解

构造函数,原型对象,实例的关系如下。

1.3 搜索机制

当搜索一个属性/方法时,先搜索实例本身,如果实例本身没有找到,再从指针找到其指向的原型对象,向上查找的特性与作用域链相似。

也就是说,如果在实例中设置了要查找的属性名,就不会再向上查找。

... ...
personOne.getColor = function(){return "实例中的属性";
}
console.log(personOne.getColor()); // "实例中的属性"
... ...

这时候如果没找到,并且该原型对象中也有一个指向另一个原型对象的指针,就从指针向上搜索原型的原型,直到原型链的末端,也就是原型不再包含指向另一个原型的指针为止。

二 原型链代码实现

从这里看出,原型链是由指向原型对象的指针将多个原型对象连接起来,上面指出,当我们new一个A实例,实例中就包含一个指向原型对象的指针。

如果我们将该实例赋值为另外一个对象实例B的原型对象,原型链就构成了,查找顺序为。
B实例−>B原型(A实例)−>A原型B实例->B原型(A实例)->A原型 B实例−>B原型(A实例)−>A原型

2.1 代码实现

在下面的代码中,访问objB的实例对象obj时,通过原型链,最终输出了objA的原型对象中的值。

function objA(){this.title = 'A';
}objA.prototype.name = "objA-prototype";function objB(){this.title = 'B';
}objB.prototype = new objA();var obj = new objB;
console.log(obj.name); // objA-prototype

2.2 结构图解

2.3 链条拓展

我们可以通过将B实例替换C对象实例的原型对象的方式来拓展该原型链。拓展后查找顺序为。
C实例−>C原型(B实例)−>B原型(A实例)−>A原型C实例->C原型(B实例)->B原型(A实例)->A原型 C实例−>C原型(B实例)−>B原型(A实例)−>A原型
原型链就是这样实现继承的。

在上面公式中,在C实例向A原型搜索的过程中,只要在某一个地方获得了一个同名属性,就会取该属性,而不再向上搜索,也就是说,在下层原型中添加上层原型链已有的方法会覆盖方法。

三 原型链的缺点

原型链也有一些缺点,如原型链中的属性是共享的,当修改某一个原型对象中的值时,下层所以实例在获取该值时都会变化,因为大家都是通过指针读取原型对象中的值。

由于这种缺陷,一般不单独使用原型链继承。

有一些缺点,如原型链中的属性是共享的,当修改某一个原型对象中的值时,下层所以实例在获取该值时都会变化,因为大家都是通过指针读取原型对象中的值。

由于这种缺陷,一般不单独使用原型链继承。

其他的继承方法请关注本专栏,等待后续文章。

JavaScript: 原型链继承(原理解析 + 代码实现 + 结构图解)相关推荐

  1. javascript 原型链继承

    JavaScript中没有类的概念,只有一个构造函数来创建对象. 但是JavaScript也可以实现继承. 首先要说的是,JavaScript中的对象分为函数对象和普通对象. 何为函数对象?? 就是 ...

  2. JavaScript 原型链运行原理

    原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...

  3. 图解JavaScript原型链继承

    JavaScript是基于原型链的继承的,忘掉类的继承,从原型链入手. 普通对象 函数对象 JavaScrip只有一种结构:对象 通过new Function()创建的对象都是函数对象,其他都是普通对 ...

  4. JavaScript原型链污染攻击

    前言 最近在看js的时候看到p神的一篇关于js原型链污染的文章,学习一下. 下面转自p神:深入理解 JavaScript Prototype 污染攻击 还有一篇案例关于js原型链污染的ctf题:从一道 ...

  5. ES6 继承(复习原型链继承)

    2019独角兽企业重金招聘Python工程师标准>>> 原型链继承 <script type="text/javascript">/* 原型链 继承 ...

  6. JavaScript进阶学习(二)—— 基于原型链继承的js工具库的实现方法

    文章来源:小青年原创 发布时间:2016-07-03 关键词:JavaScript,原型链,jQuery类库 转载需标注本文原始地址: http://zhaomenghuan.github.io... ...

  7. JavaScript 原型链和继承面试题

    JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承.通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,Ja ...

  8. 深度解析JavaScript原型链

    深度解析JavaScript原型链 文章目录 深度解析JavaScript原型链 前言 JavaScript原型链,这里只分享我自己的见解 一.原型链是什么 二.心得 三图解 总结 前言 JavaSc ...

  9. JavaScript简餐——继承之原型链继承

    文章目录 前言 一.实现方式 二.继承实例 三.问题所在 1.引用值误修改 2.子类型实例化时无法给父类构造函数传参 四.总结 前言 写本<JavaScript简餐>系列文章的目的是记录在 ...

最新文章

  1. [导入][转]常用CSS缩写语法总结
  2. 干货 | VMAF视频质量评估在视频云转码中的应用
  3. BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
  4. 为防止员工带薪拉屎,快手公司推出“计时厕所”?官方称只是为了测试!
  5. CentOS中vsftp安装、配置、卸载
  6. cesium获取模型实时坐标_Cesium 顶点着色器中求解模型坐标
  7. fprom预测结果内容_预测模型之机器学习 Machine Learning结果解读篇
  8. QT打包后音频不响应的问题
  9. 耿建超英语语法---陈述句(1)
  10. rdlc和rdl的区别
  11. 计算机ppt制作教案,《电脑幻灯我来秀—制作个性母版》教学设计
  12. 【Web前端】HTML—6.表单标签
  13. ideal拉代码和提交代码
  14. python reset_index()_python 问题 reset_index(drop=True
  15. vue-admin websocket接收消息推送+语音提示(详细代码)
  16. android9机型,安卓9正式定名Android 9 Pie,这些机型可以尝鲜
  17. 硬盘三大种类(SSD;HHD;HDD)
  18. 国籍SQL—— 看自己需求 ( 港澳台 也独立出来了)
  19. openxml的视频教程
  20. 盈帆报表软件制作编号报表(报表工具)

热门文章

  1. 在Word中创建CommandBar并显示winform窗体
  2. 基于java springboot框架开发机动车驾驶员计时培训监管系统平台
  3. GIT删除分支命令以及GIT最常用命令总结
  4. 家长注意!9月开学有这些变化 猿辅导资深教研解读新课标
  5. 破解索尼PS4系列:利用网页漏洞实现相关的ROP攻击(一)
  6. 计算机网盘怎么进,教你百度网盘如何进行图文识别?
  7. word 2007 默认显示缩略图而不是文档结构图
  8. Python界面编程第十三课:Pyside2 (Qt For Python)GridLayout网格布局
  9. 计算机图形和ps的区别,【2人回答】PS和PPT有什么区别-3D溜溜网
  10. php2612如何加墨粉,复印机如何加墨粉 复印机更换粉盒步骤