2013年8月31日土曜日

[coffeescript]ビルトインオブジェクトを拡張

coffeescriptでビルトインオブジェクトのDateの拡張に挑戦。

format関数を追加して、Date#formatで年月日フォーマットした値を返すようにしてみた。

[CoffeeScript]prototypeへの簡易アクセスで書いたように、「::」でプロトタイプにアクセスできるので、「::」に対して追加したい関数を定義してあげれば良い

Date::format = ->
  "#{@.getFullYear()}年#{@.getMonth() + 1}月#{@.getDate()}日"

console.log new Date().format()

実行結果
2013年8月31日

2013年8月17日土曜日

[CoffeeScript]prototypeへの簡易アクセス

CoffeeScriptでも、JavaScriptと同じよに「Hoge.prototype」とするとプロトタイプにアクセスすることができます。
CoffeeScriptでは、prototypeへのアクセスを更に簡単に記述出来るように、クラス名::とコロン(:)を2つ連続して書くことでプロトタイプにアクセスできます。

# クラス宣言
class Hoge
  hoge : -> "hoge"

# プロトタイプに関数を追加
Hoge::func = -> "func"

# プロトタイプの内容を出力
console.log Hoge::

# 上記分は、以下の文と同じ
console.log Hoge.prototype

上記分を実行すると、「::」でプロトタイプにアクセスできている事がわかります。
/usr/local/bin/coffee example.coffee
{ hoge: [Function], func: [Function] }
{ hoge: [Function], func: [Function] }

2013年8月3日土曜日

[CoffeeScript]メソッドのオーバライド

継承した親クラスと同名のメソッドを小クラス側に定義することで、親クラスの処理を上書きできる。
親クラスの処理を呼び出したい場合には、superで実現できる。引数がある場合には、superにパラメータとして指定すれば良い。

class Super

  func: ->
    console.log 'Super#func'


class Sub extends Super
  func: ->
    console.log 'sub#func'
    super


sub = new Sub()
sub.func()
上記コードを実行すると、以下のようにsuperキーワードで親クラスの同一メソッドが呼び出せていることが確認できる。
sub#func
Super#func