« イベント割り当て | トップページ | 関数の呼び出しイベント »

2007年3月14日 (水)

クラス/オブジェクト

クラスの作成

クラスを作成するに、dojo.declare()を用いることができる。dojo.declare()を用いるときは、事前にdojo.require('dojo.lang.declare')を宣言しておく。

dojo.declare("ClassName",null, {
  //class body
});

ClassNameには、my.class.ClassNameのように「.」を含めて、パッケージ名のように指定できる。

以下の例では、initializerとmoveToNewCityメソッドを含むPersonクラスを定義している。initializerメソッドがコンストラクタとなる。

dojo.declare("Person", null, {
    //acts like a java constructor
    initializer: function(name, age, currentResidence){
      this.name=name;
      this.age=age;
      this.currentResidence=currentResidence;
    },
    moveToNewCity: function(newState) {
      this.currentResidence=newState;
    }
});

このクラス定義を用いて、インスタンス化するには、以下のようにinitializerメソッドの引数を指定する。initializerメソッドは、オブジェクトが作られたときに一度だけ呼ばれる。

var matt= new Person('Matt', 25, 'New Mexico');

dojo.declare()において、2つ目の引数で、継承するクラスを指定することができる。以下の例では、Personクラスを継承してEmployeeクラスを宣言している。

dojo.declare('Employee', Person, {
    //acts like a constructor
    initializer:function(name, age, currentResidence, position){
      Employee.superclass.initializer(name, age, currentResidence);
      this.password=';
      this.position=position;
    },

    login: function(){
      if(this.password!='' && this.password!=null){
        alert('you have successfully loged in with the password '+this.password);
      }else{
        alert('please ask the administrator for your password');
      }
    }
});

Employee.superclass.initializerにより、Personクラスのinitializerを呼んでいる。

親クラスをのプロパティを参照するときは、superclassを指定する。配列やオブジェクトをプロパティとして用いるときは、initializerで宣言することが必要となる。プロパティの値として直接宣言することはできない。

オブジェクトに関連したメソッド

オブジェクトのメソッド呼び出しに関する関数dojo.lang.hitch()は引数により2種類の使い方がある。

1つ目の引数としてオブジェクト、2つ目の引数としてメソッド名を文字列で指定すると、指定したオブジェクトのメソッドのfunctionを返す。例えば、var func = dojo.lang.hitch(foo, "bar")を実行するとfoo.bar()を返す。

dojo.declare('my.classes.foo', null, {
initializer: function(arg) {
this.id = 'foo';
},
getId: function() {
return "I am a foo";
},
method: function() {
return "A method in foo";
}
});

var obj = new my.classes.foo();
var func = dojo.lang.hitch(obj, 'getId');
func();
--> "I am a foo"

dojo.lang.hitch()に対して、1つ目の引数としてscope、2つ目の引数としてfunctionを指定することで、scopeを指定してfunctionを実行できる。

dojo.lang.hitch(this, func); 

dojo.lang.has()は、連想配列/オブジェクトの添え字/プロパティの名前の中に指定した名前が含まれるかどうかを返す。以下の例ではtrueを返す。

dojo.lang.has( { a: "A", b: "B" }, "b" );

« イベント割り当て | トップページ | 関数の呼び出しイベント »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232684/5692248

この記事へのトラックバック一覧です: クラス/オブジェクト:

« イベント割り当て | トップページ | 関数の呼び出しイベント »