CoffeeScriptでのプライベートメンバー変数の定義
2041 ワード
最近いくつかの时间をかけてCoffeeScriptを勉强して、正直に言うと、原生のJavascriptの文法とフォーマットに惯れて、Coffeeに対して本当に少し适応していません:1つはCoffeeの中で基本的に分号と括弧を书くことができなくて、括弧など(分号强迫症のある人にとって、これは本当にしばらく适応しなければなりません);そして、Pythonのような文法形式を用いる、コードインデントによりコンパイラを導く.
しかし、本文の主な目的はもちろんCoffeeにツッコミを入れるのではなく、私はドキュメントを読む過程で、一つの問題に直面して、いくつかの資料を調べた後、やはり私の心の中の疑問を解決して、そこで出して分かち合います.
Coffeeの公式ドキュメントには、次のコードがあります(ドキュメントのClasses、Inheritance、and Superセクションの一部を切り取りました).
このCoffeeに対応するJavascriptは以下の通りです(私もほんの一部を切り取っただけです):
それでは問題が来ました.
最初は
しかし、事実は私の考えが完全に間違っていることを証明した.このCoffeeがコンパイルするJavascriptでは、
そして、私は
そこで、Googleで調べてみると、この問題について良い文章を見ました.Using private methods in CoffeeScript.
では、Coffeeでプライベートメンバー変数を定義するには、どうすればいいのでしょうか.
実は簡単です.次のようにします.
したがって、Coffeeで定義公有メンバーと私有メンバーの違いは、
しかし、本文の主な目的はもちろん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で定義することができる.