最近業務でGoogleAppsScriptを触っている上で、GASの文法のベースになっているJavascriptのオブジェクト指向な部分を復習。
サンプルは主に下記のサイトを参考にした。
インスタンスの作成
Javascriptでは関数もオブジェクトになる。そのため下記のように無名関数を使用してクラスを定義する。
var hello = function() {
Logger.log('hello');
}
hello();
また下記の記述(一般的な関数定義)とも同じ。
function hello() {
Logger.log('hello');
}
hello();
prototype
プロトタイプはインスタンスからクラスの関数を参照できる仕組み
継承だと必要のない関数まで継承されメモリ保持されてしまうが、プロトタイプでは必要な時だけインスタンス(子)がプロトタイプ(親)の関数を参照することになる。
function Dog() {}
Dog.prototype.bark = function() {
Logger.log('bow wow');
}
var dog = new Dog();
dog.bark();
参考ページにもあるように、静的なメンバ変数をインスタンス作成時に渡しておけば、新しく関数定義することなくインスタンスそれぞれの変数をセットした上で親の関数を実行することができる。
function Dog(cry) {
this.cry = cry;
}
// プロトタイプを使用して関数定義
Dog.prototype.bark = function() {
Logger.log(this.cry);
}
var chiwawa = new Dog('bow wow');
chiwawa.bark();// 'bow wow'
var shibaken = new Dog('ruff ruff');
shibaken.bark();// 'ruff ruff'