javascript - 清除调用super/extends创建的父类实例的内存
问题描述
再会,
我面临一些内存分配问题,我有一个类 Car 扩展另一个类 CarParent,然后在应用程序的其他地方创建 Car 类的实例。但是将 null 设置为 car 实例不会删除由于 super 关键字而创建的父实例。
级车:
export class Car extends CarParent {
constructor() {
super();
}
public go(msg: string): string {
console.log(msg);
return msg;
}
}
类 CarParent
class CarParent {
constructor() {
}
getParts() {
console.log("you will get parts")
}
}
内部应用:
import { Car } from './car';
class Company {
config;
car;
constructor(config) {
this.config = config;
this.car = new Car();
}
delete() {
this.car = null;
this.config = null;
}
}
function Config(config) {
const company: Company = new Company(config);
return company;
}
export default Config;
在 Index.html 上
<script>
var config = { place: "france" };
var box = new Renderer();
box.delete();
box = null;
</script>
尝试从堆分配调试:
首先创建 Car 和 CarParent 实例(屏幕截图):
在写入 box.delete() 和 box = null 并再次拍摄快照后,我可以看到汽车实例已被删除:
我很困惑。为什么会这样?是否正确,无论发生什么或如何删除 CarParent 占用的内存。
请帮忙!
解决方案
由于 super 关键字而创建的父实例
不,super()
不创建单独的实例。
我很困惑。为什么会这样?
CarParent
您在堆快照中看到的“实例”是Car.prototype
- 它是一个继承自CarParent.prototype
. 你可以看到它是如何持有.go
方法的,并且Car
作为它的.constructor
.
您不想删除它。
推荐阅读
- asp.net-core - 带有数据注释的 Razor 可重用表单视图
- c# - C# UWP 如何从点数据渲染 InkStroke?
- list - 读取多个数据文件的多个列并使用选定的列进行计算
- python - python中带有networkx的多个简单路径
- javascript - 使用 concat 合并在不同页面上定义的数组
- python - 如何计算另一个列表Python中的列表的平均值
- android - 即使不使用服务,歌曲也会在后台播放
- c# - 使第三方 I/O DLL 异步
- javascript - 如何使用 map() 创建 HTML 模板?
- linux - USB 总线 1 已注销且所有 USB 端口均不工作