有没有更好或更“实用”的方法来组织这段代码?
let activeCanvas = null;
export function createLayer() {
if (activeCanvas)
activeCanvas.disableInteraction();
let newCanvas = createCanvas({ transparent: !!activeCanvas});
let parentCanvas = activeCanvas;
activeCanvas = newCanvas;
return {
stage: newCanvas.stage,
destroy() {
newCanvas.destroy();
parentCanvas.enableInteraction();
activeCanvas = parentCanvas;
}
}
}
这将创建一个新的图层并将舞台返回给调用者,同时也可以销毁该图层,然后使父级图层成为活动图层。
图层可以相互叠加。
...那么这个"activeCanvas"变量是模块作用域的,有没有一种更"函数式"的方法将它缠绕在调用栈的某个地方?
更新
代码正常工作 - 这只是关于风格、优雅和如何以函数式编程的方式编写代码的问题。
我对代码很满意 - 只是觉得有一种更"开明"的方式来做到这一点,但我想不出来。
createLayer
的?因为现在你有一个状态,即activeLayer
,它在所有对createLayer
和destroy
方法的调用中都是共享的,这意味着通过调用createLayer
创建的所有 API 都共享该状态。实际上,它是一个单例。换句话说,任何图层都可以通过调用其destroy
方法来更改activeLayer
变量。这是有意的吗?activeLayer
应该是每个创建的图层的状态还是所有图层的状态? - nem035parentCanvas
吗?否则,在第一次调用destroy
之后,这将是true
:parentCanvas === activeCanvas
,下一次您将在父画布和活动画布上都执行操作。 - nem035