
photo credit: La Chachalaca Fotografía Sunflower + Instant Sunflower via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズでお伝えしております。
前回の記事はこちら。

GASで最も簡単なクラスの作り方をお伝えしました。
ただ、ちょっと簡単すぎて「空っぽのオブジェクト」を作るクラスだったんですよね…
ということで、今回はGoogle Apps Scriptでクラスに最も簡単なプロパティを追加する方法です。
プロパティを追加して、「空っぽじゃないオブジェクト」を生成するクラスを作ります。
あと、thisキーワードの意味についてもお伝えしますよ。
では、行ってみましょう!
前回のおさらい
まずは、前回のおさらいです。
作成したスクリプトはこちらでした。
function myFunction() { var Person = function(){}; var p = new Person(); Logger.log(p); }
まず、Personがコンストラクタになりますね。
コンストラクタは、new演算子で生成されたインスタンスにあれこれ定義するために呼び出される関数です。
GASでが、このコンストラクタがクラスの正体でしたね。
ただ、コンストラクタには何の処理も定義されていませんでしたので、生成されたインスタンスも空っぽのオブジェクトでした。
今回は、コンストラクタにプロパティを定義していこうということです。
クラスにプロパティを追加する
クラスから生成されたインスタンスはオブジェクトですから、プロパティとメソッドを持つことができるはずです。
まずは、生成したインスタンスにプロパティを持たせるようにしてみましょう。
例えば、クラスPersonから、nameという1つのプロパティを持つオブジェクトを生成したいとします。
こんなときコンストラクタPersonにはどのような処理を追加したら良いかというと、以下のようになります。
function myFunction() { var Person = function(){ this.name = "Bob"; }; var p = new Person(); Logger.log(p); }
では、実行してログを確認してみましょう!
ちゃんとインスタンスにnameプロパティが追加されていることを確認できますね。
thisキーワードとは
「this」という見慣れないものが登場しましたね…
これはthisキーワードと呼ばれるもので、コンストラクタ内で使った場合は生成されたインスタンス自体を表すキーワードとなります。
ですから、コンストラクタ内で以下のように記述することで、そのプロパティを定義することができます。
(このthisキーワードですが、「どこで使うか」によって、その表すものが変わってきますので注意が必要です。コンストラクタ以外で使用する場合については、別の役割を持ちますのでシリーズを通して紹介していきますね。)
インスタンス生成時にプロパティをセットする
では、以下のようなスクリプトを作って実行してみましょう。
クラスPersonからインスタンスを2回作ってみようというものです。
function myFunction() { var Person = function(){ this.name = "Bob"; }; var p = new Person(); Logger.log(p); var q = new Person(); Logger.log(q); }
ログを確認してみると…
生成した2つのインスタンスについて、そのnameプロパティが両方とも「Bob」になっちゃいますね。
まあ、当たり前と言えば当たり前ですが。
別のインスタンスであれば、そのプロパティに別の値を格納したいですよね…
生成してからプロパティをいちいち上書きするのもバカバカしいですし。
いったい、どうすればよいでしょうか?
コンストラクタに引数を渡す
さて、前回の記事で紹介した、new演算子を使ってコンストラクタを呼び出す書式を思い出してください。
こちらです。
ほら、関数(=コンストラクタ)を呼び出すときに、渡せるんですよ、引数が。
ですから、先ほどのスクリプトも、コンストラクタの呼び出し時に、それぞれ別の引数を渡します。
そして、コンストラクタではその受け取った値を、プロパティに代入する形にしてあげれば良いんですね。
function myFunction() { var Person = function(name){ this.name = name; }; var p = new Person("Bob"); Logger.log(p); var q = new Person("Tom"); Logger.log(q); }
実行してログを確認すると…
ばっちり!
インスタンス生成時にプロパティに別々の値を渡すことができましたね。
まとめ
以上、Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法をお伝えしました。
今回は何と言ってもthisキーワードがポイントですね。
コンストラクタ内で使用する場合は、生成したインスタンス自体を表す便利なキーワードです。
ちょっと不思議な気もしますが、とっても重要なので、今後ともよろしくお願いします。
次回は、クラスにメソッドを追加していきます。
どうぞお楽しみに!