我在围绕一些基于面向对象的JavaScript时遇到了问题。 我不确定如何让课堂沟通。示例(我使用Babel):
A class "ColorPalette" that has a list of colors
A class "Canvas" that lets you display a color from the ColorPalette colors
在我的主脚本中,我实例化了两个类,如
var colorpicker = new ColorPalette();
var drawingboard = new Canvas();
然后我可以做到。
drawingboard.draw(colorpicker.getActiveColor());
到目前为止一切顺利。我理解如何使用getter和setter,我知道我可以将数据传递给方法。凉。
但通常,我不希望主脚本处理每一个细节,例如ColorPalette应该始终知道Canvas中最常用的颜色。但是从ColorPalette类中我不应该知道或关心其他类的实例名称。
所以我可以从我的主脚本中做到这一点:
colorpicker.setMainColor(drawingboard.getMainColor());
但是我无法在colorpicker类中真正做到这一点,因为类不应该假设画布类的实例名称(" drawingboard")。 我很确定这个问题是我在这里的不好思考。因此,非常感谢任何建议。谢谢你的帮助。
答案 0 :(得分:0)
我认为,要实现将类彼此分离的目标,您需要使用MV *,IoC,Observer等设计模式,这实际上取决于您尝试做什么。
MV *在JavaScript中非常流行,它是最基本的形式,你将有一个类负责将用户操作转换为ColorPalette和Canvas方法。
JS中的IoC有点乱,但你仍然可以做类似的事情。基本上你可以在ColorPalette
中创建一个构造函数,它接受1个参数 - Canvas
并将其存储为类变量。然后,您可以使用此变量来提取所需的数据(例如,最常用的颜色)。
事件 - 您可以使用Pub-Sub或Observer或任何其他基于事件的系统在类之间传输数据并保持它们同时解耦。
您可以查看大量其他模式以找到最合适的模式。