javascript - 使用装饰器中的原型(prototype)/访问基类属性访问派生类中的基类属性

标签 javascript angular typescript

我正在使用 typescript ,并且正在为我的 Angular 类之一编写自定义装饰器。我想访问子类装饰器中的基类方法。或者使用子类原型(prototype)访问基类方法。有什么办法吗?问题在下面详细解释。

场景

我有一个像这样的基类

export class Base {
    public init() {
        console.log('My base class function');
    }
}

我有一个派生类来扩展这个基类

export class Child extends Base {

}

我想做什么

我正在尝试为派生类编写装饰器,例如

@TestDecorator(['init'])
export class Child extends Base {

}

将从基类调用 init 方法

问题是什么

为了完成上述场景,我编写了如下代码

export function Tool<T extends Base>(methods: any[]) {
    return function (target: Function) {
        methods.forEach((item) => {
            if (item === 'init') {
                target.super.init() // Stuck here
            }
        })
    }
}

我不明白如何让下面这行工作

target.super.init() // Stuck here

请帮我解决问题。我卡住了。谢谢

最佳答案

我相信您正在寻找这样的东西:

export function Tool<T extends Base>(methods: any[]) {
    return function (target: Function) {
        return class extends target {
            constructor(...args: any[]) {
                super(...args)
                methods.forEach((item) => {
                    if (item === 'init') {
                        super.init( );
                    }
                })
            }
        }
    }
}

关于javascript - 使用装饰器中的原型(prototype)/访问基类属性访问派生类中的基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628101/

相关文章:

javascript - 如何使用JSONP?

javascript - 将 ID 添加到 Fabric.js 元素

Angular 2 : Route generator for '...' was not included in parameters passed

javascript - Angular 2 : get data from http in parent-component and subscribe on it nested

javascript - Mongoose : Best way to get values for an object before save

javascript - 如何测试纯 Vue 组件(不是单个文件组件)

javascript - 如何让按钮对应于不同的下拉 div?

Angular 2 ngx-Datatable celltemplate

javascript - Linux 上的 TypeScript 调试

javascript - 使用 Typescript 未在组件中触发 Vue Router Hook