スタートページ>
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(); // エラーになる |