首页 > 解决方案 > 清除调用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 实例不会删除: 在此处输入图像描述

我很困惑。为什么会这样?是否正确,无论发生什么或如何删除 CarParent 占用的内存。

请帮忙!

标签: javascript

解决方案


由于 super 关键字而创建的父实例

不,super()不创建单独的实例。

我很困惑。为什么会这样?

CarParent您在堆快照中看到的“实例”是Car.prototype- 它是一个继承自CarParent.prototype. 你可以看到它是如何持有.go方法的,并且Car作为它的.constructor.

您不想删除它。


推荐阅读