シンボルの概要(左= CS、右= JS)
内class Animal
:
identifier: value Animal.prototype.identifier = value
@identifier: value Animal.identifier = value
@identifier= value Animal.identifier = value
identifier = value identifier = value (private var)
他の場所(同じコンパイル結果で並べ替え)
Animal::identifier = value Animal.prototype.identifier = value
Animal.identifier = value Animal.identifier = value
identifier = value identifier = value
// New:
@identifier = value this.identifier = value
identifier: value { identifier: value} (object literal)
@identifier: value ---INVALID---
CoffeeScriptでは、@はにコンパイルされthis
ます。
コンストラクトのコンテキストではclass
、メソッド定義は@
(this)の使用によって影響を受けます。簡単な例を次に示します。
class ClassObject
instanceMethod: ->
# This method will be defined on the prototype (available to instance)
@classMethod: ->
# This method is defined on the class object itself, not on the instance
this.classMethod2 = -> # See previous and below
privateVar = "private"
構文は少し異なりますが、最新の2つは同じコンパイル結果になります。
「:
クラスブロック内とはどういう意味ですか?」
プロパティを定義するために使用されます。代わりに=
(等号)を使用すると、「プライベート」変数が定義されます。
「:
(コンストラクター)メソッドの内部とはどういう意味ですか?
クラスのレベル外(たとえば、トップレベルコード、関数内、コンストラクターなど)に:
は、「特別なクラス」の意味はありません。:
オブジェクトリテラル内のキーと名前のペア間の区切り文字です。
指定されたコード@upperName: -> ...
は無効であり、最新のCoffeeScriptバージョンではコンパイルされません。ただし、は有効であり、プロパティと関数を値としてupperName: -> ...
持つオブジェクトリテラルにコンパイルされます。upperName
コンパイルされたCoffeeScriptコードを見てください:
var ClassObject;
ClassObject = (function() {
var privateVar;
function ClassObject() {}
ClassObject.prototype.instanceMethod = function() {};
ClassObject.classMethod = function() {};
ClassObject.classMethod2 = function() {};
privateVar = "private";
return ClassObject;
})();