Javascript 如何在类内部构造类的使用,以避免循环引用?
我有以下引擎类,它使用两个扩展基本渲染器类的渲染器类:Javascript 如何在类内部构造类的使用,以避免循环引用?,javascript,typescript,Javascript,Typescript,我有以下引擎类,它使用两个扩展基本渲染器类的渲染器类: import {RendererOne} from "./renderer-one"; import {RendererTwo} from "./renderer-two"; export class engine { coordinates: number; randomPropery: string; produceRenderer (type, params) { switch type
import {RendererOne} from "./renderer-one";
import {RendererTwo} from "./renderer-two";
export class engine {
coordinates: number;
randomPropery: string;
produceRenderer (type, params) {
switch type {
case "map":
return new RendererOne(this, params)
case "other":
return new RendererTwo(this, params)
default:
return null;
}
}
}
BaseRenderer类的定义如下:
import { engine} from "./index";
export abstract class BaseRenderer {
engine: engine;
constructor(engine: engine, params?) {
this.engine = engine;
}
//various drawing methods defined here which are common to all renderers
attach () {
const engine = this.engine;
//use engine defined methods and engine properties inside here
}
}
下面是一个扩展baseRenderer的渲染器的粗略示例:
import {BaseRenderer} from "./base-renderer";
import { engine } from "./index";
export class RendererOne extends BaseRenderer {
madeUpProperty: string;
params: any;
constructor(engine: engine, params?) {
super(engine, params);
var derivedParams = this.params;
}
}
上述内容会导致循环引用,那么,构建类似于上述内容的代码的正确方法是什么
渲染器需要访问引擎对象属性及其方法。这是精简的玩具代码,因此请原谅任何粗略的输入错误-希望它能传达我所面临的问题。您应该查看工厂设计模式,我认为这可能会对您有所帮助,您将拥有一个类RenderFactory,负责确定应该创建哪种类型的渲染器 编辑:这样您的引擎就不必同时导入两个类,而只导入工厂
编辑#2:另外,既然您在渲染器类的构造函数中传递了引擎,为什么要导入它?您应该查看Factory设计模式,我认为这可能会对您有所帮助,您将拥有一个类RenderFactory,负责确定应该创建哪种类型的渲染器 编辑:这样您的引擎就不必同时导入两个类,而只导入工厂 编辑#2:另外,既然在渲染器类的构造函数中传递了引擎,为什么要导入它