Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法

prototype

photo credit: over 14 MILLION views Thanks SIA-7B prototype Italian plane 1917 NARA111-SC-14309-ac via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「初心者でもわかるGoogle Apps Scriptのクラスを作ろう!」のシリーズをお送りしています。

前回の記事はこちらです。

Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズでお伝えしております。今回はGASのクラスに最も簡単なプロパティを追加する方法です。thisキーワードの意味も解説します。

GASのクラスにconstructorメソッドを定義してプロパティを追加する方法をお伝えしました。

プロパティが追加できたので、今度はメソッドですね。

ということで、今回はGoogle Apps Scriptでクラスに最も簡単なメソッドを追加する方法です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、前回のおさらいからです。

function myFunction() {
 
  class Person {
    constructor(name) {
      this.name = name;
    }
  }
 
  const p = new Person('Bob');
  console.log(p);
 
  const q = new Person('Tom');
  console.log(q);
 
}

クラスPersonに、nameプロパティを追加しました。

そして、constructorメソッドが呼び出されたときに受け取る引数を、nameプロパティに格納するようにしています。

constructorメソッド内で使用されているthisキーワードは、生成されたインスタンス自身を表すんでしたね。

今回は、メソッドを追加していきますよ!

クラスにメソッドを追加する

さて、クラスPersonにメソッドを追加していきます。

で、ちょっと以下の記事を見て思い出してほしいのですが、オブジェクトのプロパティには関数を格納することもできました。

そして、その場合は、プロパティとは言わずにメソッドというんでしたね。

【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマに、その使い方と便利さについてお伝えしていきます。今回は、GASでクラスを理解するためのオブジェクトの基礎知識についてお伝えしていきます。

なので、クラスから生成したインスタンスにも、メソッドを追加しておくことができます。

メソッド構文

そのためには、クラス内に以下のメソッド構文を定義します。

メソッド名(仮引数1, 仮引数2,…){
 //処理
}

お気づきの方もいるかと思いますが、書式はconstructorメソッドと同じです。

メソッド名を「constructor」ではない、別の任意のものにすれば、クラス内にメソッドが定義できるというわけです。

クラスにメソッドを追加したスクリプト

以下のスクリプトのように、greetメソッドを追加しました。

function myFunction() {
 
  class Person {
    constructor(name) {
      this.name = name;
    }
   
    greet() {
      Browser.msgBox(this.name + "です、こんにちは!");
    }
  }
 
  const p = new Person('Bob');
  p.greet();
 
  const q = new Person('Tom');
  q.greet();
 
}

クラスPersonの中に、greetメソッドを定義しました。

ちなみに、メッセージとして表示する内容に、thisキーワードを使用していますね。

クラスのメソッド内でthisキーワードを用いたときも、インスタンス自身を表します。

では、実行してみましょう。

クラスに追加したメソッドで表示したダイアログ

まず「Bob」のgreetメソッドが実行されますが、「OK」をクリックすれば、続いて「Tom」のgreetメソッドも実行されますよ。

参考: prototypeプロパティにメソッドを追加する

「プロトタイプ」というキーワードについて解説をしておきます。

インスタンス生成するごとにメソッドが追加…

つまり、図にするとこういう状態ですね。

それぞれのインスタンスにメソッドを追加

なんか、ちょっともったいなくありません?

プロパティの値はインスタンスが異なったら別の値が入ると予想されますから、別に気になりませんが、メソッドの内容は同じなのに、インスタンスが生成されればされるだけコピーされちゃいます。

メモリがもったいない!

どこか一箇所にメソッドを定義しておいて、それをすべてのインスタンスで使いまわしちゃいたい!

そんな願いを叶えるのが、プロトタイプという仕組みです。

プロトタイプとは

GASのすべてのクラスは、prototypeプロパティという特別なプロパティを持ちます。

デフォルトでは空のオブジェクトとなっていますが、そこにメンバーを追加することができます。

少し古い書き方をするなら、以下のような書式です。

クラス名.prototype.メソッド = function()(仮引数1, 仮引数2,…){
 //処理
}

インスタンスについてメソッドが呼び出された際、インスタンス内にそのメソッドが見当たらないときには、prototypeプロパティの内部を参照して呼び出すことができるという仕組みです。

図にすると、以下のようになりますね。

プロトタイプの仕組み

実は、class構文のメソッドは実際にはこのprototypeプロパティに格納されるように作られています。

MDNなどで組み込みオブジェクトのドキュメントを見るときに「Array.prototype.メンバー」などと表現されているのは、こういう意味があるからです。

まとめ

以上、Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法をお伝えしました。

メソッド構文によるメソッドの追加の方法をぜひマスターくださいね。

では、次回からスプレッドシートのデータをクラス化していきたいと思います。

Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法
「初心者でもわかるGoogle Apps Scriptのクラスの作り方」をテーマにシリーズをお送りしています。今回は、GASでスプレッドシートのデータの1行分を表すクラスを作る方法です。

どうぞお楽しみに!

連載目次:初心者向けGoogle Apps Scriptでクラスを作ろう

使いどころやそのメリットが分かりづらいGASの「クラス」。本シリーズでは、初心者でもわかるように「これでもか!」とじっくり着実にクラスとそのメリットについて解説をしていきます。
  1. 【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
  2. 初心者でもできるGoogle Apps Scriptで最も簡単なクラスを作る方法
  3. Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
  4. Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法
  5. Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法
  6. GASでゲッターを使って簡単なプロパティを作成する方法
  7. GASでセッターを使ってプロパティの入力に制限をかける
タイトルとURLをコピーしました