コンテンツへスキップ

hifiveのクラスモジュール紹介(その2)「継承」

by : 2017/07/19

JavaScript(ECMAScript5)ではクラスを作成することができません。ECMAScript2015になって、ようやくクラスを使えるようになりました。しかしレガシーなブラウザでは実装されていないため、Babelのようなライブラリを使ってコードを変換するのが一般的です。

JavaScriptではprototypeやdefinePropertyなどを使ってクラス(的なもの)を実装しますが、hifiveではそういった面倒な仕組みを意識することなくクラスを実装できるモジュールを開発しました。この機能は1.3.1以降で利用できます。

今回はクラスの基本機能でもある継承について紹介します。

ベースになるクラスについて

まずベースになるクラス、AnimalClassについて紹介します。名前と鳴き声を紹介するメソッドがあります。


var AnimalClass = h5.cls.RootClass.extend(function (super_) {
return {
// クラス名(完全修飾名)
name: 'AnimalClass',
// クラスのフィールド定義
field: {
_name: null,
_voice: null
},
// クラスのメソッド定義
method: {
constructor: function (params) {
// 親クラスのコンストラクタ呼び出し
super_.constructor.call(this);
this._name = params;
},
hello: function() {
return this._name;
},
cry: function(name, voice) {
return name + "'s crying voice is " + voice;
}
}
};
});

view raw

index.js

hosted with ❤ by GitHub

継承する

このAnimalClassを継承するクラスとして、DogClassとCatClassを作成します。この時、 AnimalClass.extend を使います。コンストラクタは必須のメソッドになります。また、この時点で親のフィールド(voice)にアクセスできます。親のコンストラクタを呼び出す際には
`super
.constructor.call(this, params);` を使います。


var DogClass = AnimalClass.extend(function (super_) {
return {
name: 'DogClass',
method: {
constructor: function (params) {
super_.constructor.call(this, params);
this._voice = 'bow wow';
},
cry: function() {
return super_.cry(this._name, this._voice);
}
}
}
});

view raw

index.js

hosted with ❤ by GitHub

CatClassも殆ど同じ実装になります。


var CatClass = AnimalClass.extend(function (super_) {
return {
name: 'CatClass',
method: {
constructor: function (params) {
super_.constructor.call(this, params);
this._voice = 'mew';
},
cry: function() {
return super_.cry(this._name, this._voice);
}
}
}
});

view raw

index.js

hosted with ❤ by GitHub

このように共通化される機能は親クラスに入れられるようになります。

使い方

継承したクラスは通常のクラスと同じように実装できます。


var dog = Animal.DogClass.create('Hachi');
$("#dog").val(dog.cry());
// -> Hachi's crying voice is bow wow
var cat = Animal.CatClass.create('Tama');
$("#cat").val(cat.cry());
// -> Tama's crying voice is mew

view raw

index.js

hosted with ❤ by GitHub


サーバサイドの開発に慣れている方にとってはクラスや継承は当たり前のものでしょう。これによって実装がとても簡単に、生産性高いものになるはずです。ぜひhifiveのクラス機能を使いこなしてください。

From → hifive

コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。