一.概念

当试图查找实例对象的某个属性时,不仅仅会在实例类上查找,还会在这个类的父亲爷爷祖爷爷,层层向上,直到查找到第一个名称相同的属性或者到达一个空的原型,这个就是javascript的原型链机制。其中每一层的原型所构成的这条查找链就是原型链。

三个类比: 资产=prototype ,隐式资产指针__proto__=父亲的资产 , 钱 = 属性/方法function
四句话:

  1. 查找原型链就是沿着指针__proto__ 找祖辈的要钱的过程
  2. 一个类的资产 = 自己的钱 + 隐式资产(父亲的资产)
    换算:类.prototype = 自己所有方法(包含构造方法+其他方法)+ proto(父类的prototype)
  3. new 出来的实例对象,想成未成年没有自己的prototype资产,只能沿着__proto__找隐式资产 = 类(父亲)的资产
    换算: 实例对象.proto = 类.prototype
  4. 万物起源于object,起源的隐式资产 为null空。

上面四句话翻译成js行话:

1.查找原型链就是找祖辈要属性/方法的过程
2.类.prototype = 自己所有方法(包含构造方法+其他方法)+ proto(父类的prototype)
3. 实例对象.proto = 类.prototype
4. 万物皆object的意思:所有的类的祖籍源头都是Object

二. 看代码

例子:Teacher 类 ==> 继承 Person 类 ==> 继承 Object 类 ==> null

class Person {constructor(name) {this.name = name;}drink(){console.log(this.name,)}
}class Teacher extends Person{constructor(name,sub) {super(name)this.sub = sub}drink(){console.log(this.name,'教授课程:',this.sub)}
}let t = new Teacher("李老师","化学")// new出来的实例 t 未成年,他只有隐资产__proto_ = 父亲Teacher的资产
console.log(t.__proto__=== Teacher.prototype)console.log(t.__proto__.__proto__.__proto__.__proto__ === null)
// 怎么理解最后为null  : 婴儿是t, Teacher类是父亲,Person类是爷爷,Object 祖爷爷
// 1. t.__proto__ ,婴儿t的隐式资产是父亲的资产,Teacher.prototype
// 2.  (t.__proto__). __proto__  父亲Teacher的隐式资产是爷爷的资产,Person.prototype
// 3.  (t.__proto__. __proto__). __proto__   爷爷Person的隐式资产是祖爷爷的资产,Object .prototype
// 4.  (t.__proto__. __proto__. __proto__) .__proto__    祖爷爷Object白手起家,没有隐式资产 为空null

js 四句话搞懂原型和原型链相关推荐

  1. 【言简意赅】四句话搞懂第一范式,第二范式,第三范式,以及BCNF

    关于各种范式的定义,相信大家看早已看的厌烦, 这里就用最简单粗暴的方式讲解我们如何理解这几种范式. 注:详细定义见书或百度百科, 我只负责让各位读者理解内核. 第一范式:列不能再分,不能重复. 第二范 ...

  2. 几句话搞懂朴素贝叶斯法(简单理解和应用)

    几句话搞懂朴素贝叶斯法(简单理解和应用) 适合如我这般完全忘记数学知识的小白,大佬可绕行 贝叶斯定理 先验概率 条件概率 极大似然估计 贝叶斯估计 公式解读:贝叶斯公式.极大似然估计.贝叶斯公式变形 ...

  3. 四句话看懂等保2.0测评结果

    等保2.0自2019年12月1日开始正式实施,其中测评结果由1.0时代的符合.基本符合.不符合改为2.0时代的优.良.中.差四个等级,测评及格线也由原来的60分提高到了70分. 如何快速看懂等保2.0 ...

  4. 牛逼,三句话搞懂 Redis 缓存穿透、击穿、雪崩!

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...

  5. 几句话搞懂什么是batch

    工作实例 最后,让我们用一个小例子来说明这一点. 假设您有一个包含200个样本(数据行)的数据集,并且您选择的Batch大小为5和1,000个Epoch. 这意味着数据集将分为40个Batch,每个B ...

  6. 1句话搞明白啥是码元、啥是比特率、啥是波特率

    1句话搞明白啥是码元.啥是比特率.啥是波特率 一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据.4bit数据!你发送一个脉冲信号,如果就可以携带4bit数据,肯定 ...

  7. 虚伪的人,喜欢说这四句话,不要深交

    与人交往,需要谨慎,一定要看清对方的人品.选择和什么样的人交往,对我们自身的影响是非常大的,交一个人品好的人,有可能就会让自己受益终生:交一个人品不好的人,就有可能会给自己带来一些不利,甚至是伤害. ...

  8. 四句话解决const赋值问题

    有修饰自己的const就不能再被赋值,且一定要初始化(reference同样) 等号右边修饰自己的const在赋值时会被忽略 指针的类型有const type(不能用指针修改所指内容)和 type(可 ...

  9. 看了Lby的博客 我也总结一下我学到的面向对象 主要归纳就是文章的最后四句话...

    # 面向对象 - 它是一个编程思想 + 当我需要完成一个业务逻辑的时候 先写一个构造函数 + 这个构造函数可以创建一个对象(这个对象可以完成业务逻辑) + 使用构造函数去 new 一个对象 + 让对象 ...

最新文章

  1. spring实现listener(转)
  2. 面试中又被问到Redis如何实现抢购,赶快代码实现一波吧!
  3. Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  4. Javascript权威指南学习笔记一:数据类型
  5. Java 8 CompletableFuture 教程 1
  6. 唯品会2017年双11大促技术保障实践,全域提供25万QPS服务能力
  7. 什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定...
  8. canvas绘制字体-属性设置2
  9. 出现(n+1)/2次的数 — 给n个数字,求至少出现(N+1)/2次的那个数字?
  10. c#简易学生信息管理系统
  11. 单片机学习05_单片机软件架构
  12. python实现杨辉三角
  13. 用ESP32打造一个物联网红外测温打卡机/春节结束急着上班?哒咩,再努力奋斗也要先测体温
  14. 华为路由器NAT经典配置
  15. nofollow、noopener和noreferrer标签的区别
  16. 传统数仓如何转型大数据
  17. 单例模式 Windows下防止多开简介
  18. 5G网下通过网络编码增强转发策略的NDN物联网内容分发模型
  19. 编译报错:error: ro.build.fingerprint cannot exceed 91 bytes
  20. unity, Graphics.Blit (null, null, mat,0);

热门文章

  1. 终于搭建成功Xamarin for Android平台
  2. android 画 月牙曲线,几何画板如何给月牙图形填充颜色
  3. k8s之pause容器
  4. “傻瓜”不是瓜,“肮脏”本不脏
  5. 基于STM32 GPIO模拟8080时序操作ILI9341-学习笔记12
  6. 易观千帆 | 2023年1月银行APP月活跃用户规模盘点
  7. 完成千万元A轮融资,小象生活能否成为折扣界的“永辉”?
  8. Elasticsearch搜索引擎第十一篇-Suggest查询建议
  9. 高一学生计算机学情分析,高一学生学情分析——李涛
  10. 加密信息:你休想偷看我发的悄悄话