js 四句话搞懂原型和原型链

本文详细解释了JavaScript的原型链机制,通过类比阐述了如何沿着__proto__属性查找属性和方法的过程。举例说明了类的继承关系,如Teacher类继承自Person类,Person类又继承自Object类,最终到达原型链的终点null。同时,文章通过代码展示了实例对象如何通过原型链访问属性,以及验证原型链的断点。
摘要由CSDN通过智能技术生成

一.概念

当试图查找实例对象的某个属性时,不仅仅会在实例类上查找,还会在这个类的父亲爷爷祖爷爷,层层向上,直到查找到第一个名称相同的属性或者到达一个空的原型,这个就是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


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值