網站搜尋

javascript - ReferenceError: 無法在初始化前訪問 <Class>


我有一個簡單的自動加載方法,它使用 require() 初始化並返回類的實例

上述簡單需求是一些從資料庫請求資訊並檢查檔案系統中是否存在類別的邏輯。

let elementClass = require('./elements/' + element.name).default;

Node 和 ts-node 編譯沒有問題,但當透過 require 創建實例時,我得到 ReferenceError: Cannot access 'Object' before initialization

Object 是主要的抽象類別,被 Element 擴展,而 Element 則被元素類型擴展。

所需的是鏈中最後的類 elementType

如果沒有繼承 Object 類別,類別初始化沒有問題,但 Object 類別在沒有任何修改和空的建構函式下進行了測試。並且所有邏輯都轉移到 Element 類別。

物件.ts

export default class Object
{
    public id: number;
    public name: string;
    public type: string;
    public parent: number;
    public owner: number;
    public permission: string;
    public data: {[name: string]: any};
    protected dataSchema: {[name: string]: any} = {};

    constructor(id: number, name: string, type: string, parent: number, owner: number, permission: string, data: {[name: string]: any})
    {
        if(new Validator().validate(data, this.dataSchema))
            throw new Error('Invalid input data');

        this.id = id;
        this.name = name;
        this.type = type;
        this.parent = parent;
        this.owner = owner;
        this.permission = permission;
        this.data = data;
    }
}

Element.ts

import Object from "./object";

export default class Element extends Object
{
/**
 * simple logic no constructor
 */
}

ElementType.ts

import Element from '../element';

export default class ElementType extends Element
{
/**
 * Simple logic without constructor
 */
}

即使類別中沒有任何簡單的方法,它也無法運作,只有在不使用主父類別(Object)時才會運作

是否有某個問題需要兩次延伸的類別?

答案#1

Object 是保留字,我只好把類別重新命名為其他名稱。