CoffeeScriptでのプライベートメンバー変数の定義


最近いくつかの时间をかけてCoffeeScriptを勉强して、正直に言うと、原生のJavascriptの文法とフォーマットに惯れて、Coffeeに対して本当に少し适応していません:1つはCoffeeの中で基本的に分号と括弧を书くことができなくて、括弧など(分号强迫症のある人にとって、これは本当にしばらく适応しなければなりません);そして、Pythonのような文法形式を用いる、コードインデントによりコンパイラを導く.
しかし、本文の主な目的はもちろんCoffeeにツッコミを入れるのではなく、私はドキュメントを読む過程で、一つの問題に直面して、いくつかの資料を調べた後、やはり私の心の中の疑問を解決して、そこで出して分かち合います.
Coffeeの公式ドキュメントには、次のコードがあります(ドキュメントのClasses、Inheritance、and Superセクションの一部を切り取りました).
class Animal
    constructor: (@name) ->
    
    move: (meters) ->
        alert @name + " moved #{meters}m."

このCoffeeに対応するJavascriptは以下の通りです(私もほんの一部を切り取っただけです):
Animal = (function() {
    function Animal(name) {
        this.name = name;
    }

    Animal.prototype.move = function(meters) {
        return alert(this.name + (" moved " + meters + "m."));
    };

    return Animal;
})();

それでは問題が来ました.constructorはAnimalクラスの構造関数であり、これは問題ない.そして、Animalというクラスでは、moveの方法が定義されている.もちろん、確かに属しています.しかし、不思議なことに、なぜアニマルのprototypeにデフォルトで追加されたのでしょうか.
最初はconstructorがおかしいと思っていたので、constructorというブロックを外しました.
class Animal
    move: (meters) ->
        alert @name + " moved #{meters}m."

しかし、事実は私の考えが完全に間違っていることを証明した.このCoffeeがコンパイルするJavascriptでは、moveの方法はAnimal.prototypeにある.
そして、私はmoveの方法の下でいくつかの変数と方法を定義したが、例外なく、すべてAnimal.prototypeに付加した.
そこで、Googleで調べてみると、この問題について良い文章を見ました.Using private methods in CoffeeScript.
では、Coffeeでプライベートメンバー変数を定義するには、どうすればいいのでしょうか.
実は簡単です.次のようにします.
class Animal
    constructor: (@name) ->
    
    publicMethod: ->
        'this is a public method'
    
    privateMethod = ->
        'this is a private method'
        
    privateVariable = 'private'

したがって、Coffeeで定義公有メンバーと私有メンバーの違いは、:を用いるか=を用いるかである.したがって、=を使用することにより、クラスのプライベートメンバー変数をCoffeeで定義することができる.