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