funとmethodの違い

Xtalでは関数生成を「fun」、そしてメソッドの生成を「method」で行います。
JavaScript等では、普通の関数生成もメソッドの生成も全て同じ「function」でおこないます。
Xtalが分かれている理由、それは「this」の扱いのためです。

「fun」で関数を作った場合、「this」はその関数を作ったときの「this」が束縛され、その関数をいつ実行しても同じ「this」が使われます。
一方、「method」で関数を作った場合、「this」は束縛されず、関数の呼び出し元が暗黙的に渡す「this」が使われます。

例えば

obj.foo();

という呼び出しで、foo内のthisの扱いは

  • fooがfunな場合、foo関数が定義されたときのthisがthisとなり
  • fooがmethodな場合、objがthisとなります。
foo();
Bar::foo();

という呼び出しで、foo内のthisの扱いは

  • fooがfunな場合、foo関数が定義されたときのthisがthisとなり
  • fooがmethodな場合、関数呼び出し元のthisがthisとなります。


この呼び出しもとのthisがthisとして使われる機能があるからこそ、スーパークラスメンバ関数を呼ぶとき、

Super: class{
  foo: method(){

  }
}

Sub: class(Super){
  foo: method(){
    Super::foo();
  }
}

というように書けるわけです。
JavaScriptでは、これを綺麗に書く方法がなく、小細工を弄する必要があります。