问题简述学习《Vue.js 设计与实现——霍春阳》这本书时,了解到 Vue3 响应式机制的实现使用到了 WeakMap 类型,Map 和 WeakMap 的不同之一是:后者是对原始对象的弱引用,如果原始对象因为没有被其他地方引用,而被垃圾回收了,WeakMap 中自然也就不存在这一属性,做了一点小实验,特此来记录一下。实验代码因为 v8 引擎的垃圾回收是自动的,且在占用内存较大时才会开始回收垃圾,所以下面的代码运行到最后并不会看到期待的效果,因此要通过 --expose-gc 参数允许开启垃圾回收新建 weakmap.js,并在第一行打断点const map = new Map(); const weakmap = new WeakMap(); let foo = { name: 'foo' } let bar = { name: 'bar' } map.set(foo, 'this is foo'); weakmap.set(bar, 'this is bar'); foo = null; bar = null; global.gc(); console.log('weak

先说结论每个构造函数都有一个原型对象原型原型有一个属性指回构造函数实例对象有一个内部指针指向原型对象原型链图示我是倒着去理解原型链的,先根据原型链现有的状态(规则),逐步深入去刨析它们之间的关系。拿下面这个图来看,Foo、Object、Function 是构造函数,它们满足这样的关系:每个构造函数都有一个原型对象 (prototype),在图中用紫色文字箭头指示;原型有一个属性指回构造函数 (constructor),在图中用绿色文字箭头指示;实例有一个内部指针指向原型 (__proto__),在图中用褐色文字箭头指示。 显然,要搞清楚原型链,必须要了解 (__proto__),prototype,constructor。关于__proto__每个对象都有一个 (__proto__) 属性指向构造函数的 prototype从对象开始,对象可不止是这样的:let obj = {};在 JavaScript 中,除了基本数据类型外,其他的一切都是对象。通过 function 关键字定义的函数、通过 let、const 声明的用花括号包裹的变量、通过 class 关键字定义的类,都可看作是