Javascript 将JS设计模式转换为CoffeScript时发生类错误
在俄罗斯维基百科上,我找到了Javascript 将JS设计模式转换为CoffeScript时发生类错误,javascript,coffeescript,Javascript,Coffeescript,在俄罗斯维基百科上,我找到了Builder设计模式的代码,并尝试将其转换为咖啡脚本 这就是本文的要点 我将构造函数(new FuncName)调用的每个函数都更改为class FuncName,但是PizzaBuilder.call(this)出现错误在构造函数中 PizzaBuilder = -> pizza = new Pizza() @getPizza = -> pizza @createNewPizzaProduct = -> pizza.cle
Builder
设计模式的代码,并尝试将其转换为咖啡脚本
这就是本文的要点
我将构造函数(new FuncName)调用的每个函数都更改为class FuncName
,但是PizzaBuilder.call(this)出现错误代码>在构造函数中
PizzaBuilder = ->
pizza = new Pizza()
@getPizza = -> pizza
@createNewPizzaProduct = -> pizza.clear()
@buildDough = (val) ->
@buildSauce = (val) ->
@buildTopping = (val) ->
class HawaiianPizzaBuilder
PizzaBuilder.call this
pizza = @getPizza() # imitation protected
buildDough: -> pizza.setDough "cross"
buildSauce: -> pizza.setSauce "mild"
buildTopping: -> pizza.setTopping "ham+pineapple"
在javascript函数中,HawaiianPizzaBuilder
是类的构造函数。在Coffeescript中,您需要将其显式定义为构造函数
方法,如下所示:
class HawaiianPizzaBuilder
constructor: ->
PizzaBuilder.call this
pizza = @getPizza() # imitation protected
@buildDough: -> pizza.setDough "cross"
@buildSauce: -> pizza.setSauce "mild"
@buildTopping: -> pizza.setTopping "ham+pineapple"
您还忘记了这个。
在构建…
函数定义之前
不过,我想推荐另一个版本的相同模式示例,因为coffeescript提供了更简单的类继承语法,如下所示:
class PizzaBuilder
constructor: ->
@pizza = new Pizza()
buildDough: -> @
buildSauce: -> @
buildTopping: -> @
class HawaiianPizzaBuilder
buildDough: ->
@pizze.setDough "cross"
@
#...override other methods
builder = new HawaiianPizzaBuilder
myPizza = builder.buildDough().buildSauce().pizza
class PizzaBuilder
constructor: ->
@pizza = new Pizza()
buildDough: -> @
buildSauce: -> @
buildTopping: -> @
class HawaiianPizzaBuilder
buildDough: ->
@pizze.setDough "cross"
@
#...override other methods
builder = new HawaiianPizzaBuilder
myPizza = builder.buildDough().buildSauce().pizza