Private members in CoffeeScript?

后端 未结 11 2046
太阳男子
太阳男子 2020-12-12 13:37

Does somebody know how to make private, non-static members in CoffeeScript? Currently I\'m doing this, which just uses a public variable starting with an underscore to clari

11条回答
  •  爱一瞬间的悲伤
    2020-12-12 13:51

    "class" in coffee scripts leads to an prototype based result. So even if you use a private variable it is shared between instances. You can do this:

    EventEmitter = ->
      privateName = ""
    
      setName: (name) -> privateName = name
      getName: -> privateName
    

    .. leads to

    emitter1 = new EventEmitter()
    emitter1.setName 'Name1'
    
    emitter2 = new EventEmitter()
    emitter2.setName 'Name2'
    
    console.log emitter1.getName() # 'Name1'
    console.log emitter2.getName() # 'Name2'
    

    But be careful to put the private members before the public functions, because coffee script returns the public functions as object. Look at the compiled Javascript:

    EventEmitter = function() {
      var privateName = "";
    
      return {
        setName: function(name) {
          return privateName = name;
        },
        getName: function() {
          return privateName;
        }
      };
    };
    

提交回复
热议问题