JavaScript 对于类深度的解析

很多人(包括以前的我),对于类的指向、 prototype 指向、实例的指向,是懵的,停留在会用,但不求甚解的阶段

我们先创建一个类

class xxx {
  constructor(){
    this.x = 'x'
    this.y = 'y'
  }
  say1(){
    console.log(1)
  }
}

给这个类的prototype添加一个方法

xxx.prototype.say2 = () => {
  console.log(2)
}

实例化这个类

let a = new xxx()
let b = new xxx()

在控制台分别去打印它们

很明显,在JavaScript中类是一个函数,是一个function,通过它实例化(构造)的是一个object,并且之前在类中定义的方法,好像在实例中看不见了。但是实例确确实实能够调用到。为什么会这样,以下是我推测的结构

通过代码class xxx {}会在内存(堆栈?)里面创建两个板块,一个是私有板块,每一个实例都是独立的,一个板块是公有的,每一个实例都可以访问到
在代码中class xxx 之后 直接输出xxx,xxx指向的私有板块的代码,xxx是一个函数 typeof 为 function
xxx通过.prototype 来访问公有板块,并且有读写权

实例化的a可以通过_proto_来访问公有板块,但是是只读的


并且,系统在实例调用公共板块方法的时候,会默认通过_proto_去查找公共板块的方法比如
比如 a.say1  会被解析成 a._proto_.say1

有些用词可能有些不准确,或者是可能理解有些不到位,欢迎大佬指正,写博客本来就是为了双赢

发布了23 篇原创文章 · 获赞 0 · 访问量 3147
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览