Help us understand the problem. What is going on with this article?

CoffeescriptのClassの作り方メモ

More than 5 years have passed since last update.
  • 間違ってそうだけど、メモを残してみる。
  • :: (ダブルコロン)の意味がprototypeということで追記してみた。

Sample class

hoge.coffee
class Hoge
  # static public parameter / constants
  @classParam = "hoge"               # Hoge.classParam
  @CONST = 1                         # Hoge.CONST

  # prototype parameter
  prototypeParam : 0                 # Hoge.prptotype.prototypeParam
  Hoge::prototypeParam2 = 0          # Hoge.prototype.prototypeParam2

  # static private parameter
  _privateParam = 0                  # var _privateParam

  # static public method
  @classMethod : (param)->           # Hoge.classMethod = function(param){...}
    alert param

  # constructor
  constructor: (@instanceParam) ->   # Hoge = function(instanceParam){...}
    @instanceParam2 = ""

  # public method
  instanceMethod: (param) ->         # Hoge.prototype.instanceMethod(param){...}
    @instanceParam = param

  # static private method            # var _privateMethod = function(){...}
  _privateMethod = ->
    _privateParam++

static public parameter / constants

  • @を付けたパラメータは、Hoge.classParam = "hoge";のように展開される。
  • =と:で差異はない。
  • classの定数を定義する場合もこの方法を用いる。定数は全て大文字とする。

prototype parameter

  • @無しで:で定義したパラメータはHoge.prototype.prototypeParam = 0;の様に展開される。
  • Hoge:: に続けて定義しても同じ意味になる。値は=で設定する。
  • 使用しない方がいい。constructorで@付き変数を定義するようにする。

static private parameter

  • @無しで=で定義したパラメータはvar _privateParam = 0;の様に展開される。
  • staticなprivate変数なので、値はインスタンス間で共有される。
  • staticでないprivate変数は対応が難しいので、constructorで@付き変数を用意して、外部から使わないようにするのがいいと思われる。

static public method

  • @付きのmethodは、Hoge.classMethod = function(param){...}のように展開される。
  • =と:で差異はない。

constructor

  • @付きの引数は、インスタンスのパラメータとして初期化される。this.instanceParam = instanceParam;の様に展開される。
  • 引数以外のインスタンスパラメータはconstructor内で@付きで宣言する。this.instanceParam2 = "";の様に初期化される。

public method

  • :で宣言したmethodは、Hoge.prototype.instanceMethod = function(param){...}の様に展開される。
  • constructorでなくても、@付きの引数や、@付きの変数を使用できる。thisに変数が追加される。

static private method

  • =で宣言したmethoは、var _privateMethod = function(){...}の様に展開される。
  • public methodからそのまま実行した場合、staticなmethodなので、インスタンスのthisにはアクセスできない。_privateMethod.call(this);の様にする。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした