スタートページ>
Javascript>
CoffeeScript
CoffeeScriptの概要←
(1)変数の指定←
(2)制御命令←
(3)関数←
CoffeeScript文法の基本(4)クラス
Class 構造の一般形
継承(inheritance)
アクセス制御
class クラス名 プロパティ 用いる変数(データベースのレコードの属性リスト)の定義 コンストラクタ 外部からレコードが与えられたときの初期設定 (並びが同じなら、プロパティ名と異なってもよい) メソッド 入力データのクラス内での処理 レコード = new クラス名(変数リスト) 外部からのメソッドの呼び出し
省略をしない記述です。かなり煩雑になります。
CoffeeScript
class 自動車クラス
# プロパティ
車名 = ""
区分 = ""
排気量 = 0
# コンストラクタ
constructor: (引数1, 引数2, 引数3) ->
this.車名 = 引数1
this.区分 = 引数2
this.排気量 = 引数3
# メソッド
車表示: ->
alert "#{this.車名}, #{this.区分}, #{this.排気量}"
車A = new 自動車クラス "スカイライン", "乗用車", 1500
車A.車表示();
alert 車A.車名
|
JavaScript
var 自動車クラス, 車A;
自動車クラス = (function() {
var 区分, 排気量, 車名;
class 自動車クラス {
// コンストラクタ
constructor(引数1, 引数2, 引数3) {
this.車名 = 引数1;
this.区分 = 引数2;
this.排気量 = 引数3;
}
// メソッド
車表示() {
return alert(`${this.車名}, ${this.区分}, ${this.排気量}`);
}
};
// プロパティ
車名 = "";
区分 = "";
排気量 = 0;
return 自動車クラス;
}).call(this);
車A = new 自動車クラス("スカイライン", "乗用車", 1500);
車A.車表示(); // スカイライン, 乗用車, 1500
alert(車A.車名); // スカイライン
|
CoffeeScript
class 自動車クラス
# コンストラクタ
constructor: (@車名, @区分, @排気量) ->
# メソッド
車表示: ->
alert "#{@車名}, #{@区分}, #{@排気量}"
車A = new 自動車クラス "スカイライン", "乗用車", 1500
車A.車表示();
alert 車A.車名
|
JavaScript
var 自動車クラス, 車A;
自動車クラス = class 自動車クラス {
// コンストラクタ
constructor(車名, 区分, 排気量) {
this.車名 = 車名;
this.区分 = 区分;
this.排気量 = 排気量;
}
// メソッド
車表示() {
return alert(`${this.車名}, ${this.区分}, ${this.排気量}`);
}
};
車A = new 自動車クラス("スカイライン", "乗用車", 1500);
車A.車表示(); // スカイライン, 乗用車, 1500
alert(車A.車名); // スカイライン
|
「自動車クラス」をスーパークラスとして、サブクラス「乗用車クラス」を定義します。
スーパークラスでのプロパティ「車名、区分、排気量」の設定を継承し、さらに「乗車人数」を加えます。
CoffeeScript
class 自動車クラス
constructor: (@車名, @区分, @排気量) ->
車名表示: ->
alert @車名
# サブクラス
class 乗用車クラス extends 自動車クラス
constructor: (車名, 区分, 排気量, @乗車人数) ->
super(車名, 区分, 排気量)
乗車人数表示: ->
alert @乗車人数
車A = new 乗用車クラス "スカイライン", "乗用車", 1500, 5
車A.車名表示();
車A.乗車人数表示();
|
JavaScript
var 乗用車クラス, 自動車クラス, 車A;
自動車クラス = class 自動車クラス {
constructor(車名1, 区分1, 排気量1) {
this.車名 = 車名1;
this.区分 = 区分1;
this.排気量 = 排気量1;
}
車名表示() {
return alert(this.車名);
}
};
// サブクラス
乗用車クラス = class 乗用車クラス extends 自動車クラス {
constructor(車名, 区分, 排気量, 乗車人数) {
super(車名, 区分, 排気量);
this.乗車人数 = 乗車人数;
}
乗車人数表示() {
return alert(this.乗車人数);
}
};
車A = new 乗用車クラス("スカイライン", "乗用車", 1500, 5);
車A.車名表示(); // スカイライン
車A.乗車人数表示(); // 5
|
クラス内で設定した関数は、基本的に外部からも利用できます。しかし、セキュリティ等の観点から、外部からの利用をさせない仕組みも必要です。
「関数 : ->」 public 外部からのアクセスを許す 「関数 = ->」 private 外部からのアクセスを禁止する
CoffeeScript
class クラス
constructor: (@変数A, @変数B) ->
関数A: -> # public
alert @変数A
関数B = -> # private
alert @変数B
データ = new クラス "変数A", "変数B"
alert データ.変数A
alert データ.変数B
データ.関数A() # public関数
データ.関数B() # private関数
|
JavaScript
var クラス, データ;
クラス = (function() {
var 関数B;
class クラス {
constructor(変数A, 変数B) {
this.変数A = 変数A;
this.変数B = 変数B;
}
関数A() {
return alert(this.変数A);
}
};
関数B = function() {
return alert(this.変数B);
};
return クラス;
}).call(this);
データ = new クラス("変数A", "変数B");
alert(データ.変数A); // 変数A
alert(データ.変数B); // 変数B
データ.関数A(); // 変数A
データ.関数B(); // エラーになる
|