CoffeeScript重构共享变量

Joh*_*ohn 4 javascript coffeescript

我是CoffeeScript的新手,并试图理解如何重构这个例子.既然两个函数共享画布和上下文,有没有办法将它们拉出函数并共享它们而不是重复自己?我确信这是显而易见的,我很遗憾,但我无法让它发挥作用.

CoffeeScript文件

@draw_rectangle = ->
  canvas = document.getElementById("main_canvas")
  context = canvas.getContext("2d")
  context.fillRect(50, 25, 150, 100)

@draw_square = ->
  canvas = document.getElementById("main_canvas")
  context = canvas.getContext("2d")
  context.fillRect(100, 50, 100, 50)
Run Code Online (Sandbox Code Playgroud)

HTML正文:

<body>
  <canvas id="main_canvas"></canvas>
  <p><a onclick="draw_square()" href="#">Draw Square</a></p>
  <p><a onclick="draw_rectangle()" href="#">Draw Rectangle</a></p>
</body>
Run Code Online (Sandbox Code Playgroud)

Tre*_*ham 6

可能最优雅的方法是使用一个类,或者至少一个对象,它将包含方法canvascontext变量.该对象还将跟踪它是否已经初始化.这是第一次尝试:

painter =
  draw_rectangle: ->
    @init() unless @initialized
    @context.fillRect 50, 25, 150, 100

  draw_square: ->
    @init() unless @initialized
    @context.fillRect 100, 50, 100, 50

  init: ->
    canvas = document.getElementById "main_canvas"
    @context = canvas.getContext "2d"
    @initialized = true
Run Code Online (Sandbox Code Playgroud)

现在,如果你以后决定,你想有多个画布,这将会是很容易改变painter =class Painter和重用的代码.