
photo credit: wuestenigel Colorful kids abacus via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズ連載をお送りしております。
前回の記事はこちら。

スプレッドシートのデータ行の集合を表すクラスPersonsを作成しました。
今回は、そのPersonsクラスにメソッドを追加していきますよ。
ということで、Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方です。
では、行ってみましょう!
前回のおさらい
まず、題材としているスプレッドシートですが、こちらになります。
この各行を表すクラスPersonを以下のようにつくりました。
(function(global){
var Person = function(record){
var _id = record[0];
this.name = record[1];
this.gender = record[2];
this.birthday = record[3];
Object.defineProperties(this, {
id: {
get: function(){
return _id;
}
}
});
};
Person.prototype.greet = function(){
Browser.msgBox(this.name + "です、こんにちは!");
};
Person.prototype.log = function(){
Logger.log('%s|%s|%s|%s|', this.id, this.name, this.gender, this.birthday);
};
global.Person = Person;
})(this);
このクラスから生成するPersonクラスは、前述のスプレッドシートの一行分を表すものですから、表全体を表すのはその集合となります。
それで作成したのが、以下のPersonsクラスです。
(function(global){
var Persons = function() {
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
values.shift();
for(var i = 0; i < values.length; i++){
var p = new Person(values[i]);
this[p.id] = p;
}
};
global.Persons = Persons;
})(this);
スプレッドシートの見出し以外のデータ行について、Personクラスを生成します。
そしてそれらを、idをプロパティ、インスタンスのPersonオブジェクトを値としてオブジェクト形式で持つようにしました。
その確認用の関数myFunctionがこちらですね。
function myFunction() {
var persons = new Persons();
for(var id in persons){
persons[id].log();
}
}
今回は、このPersonsクラスにインスタンスの追加と削除をするメソッドを追加していきますよ。
自作クラスにメソッドを追加する
クラスにメソッドを追加するには、以下の記事でお伝えしたとおり、コンストラクタのprototypeプロパティに追加していくんでしたね。

オブジェクトに新しいプロパティを追加するメソッド
Personsオブジェクトに、新しいPersonオブジェクトを作成してプロパティとして追加するaddメソッドとを作成しました。
こちらです。
Persons.prototype.add = function(record){
var p = new Person(record);
this[p.id] = p;
return this[p.id];
};
addメソッドで受け取った仮引数recordを元に、Personクラスのインスタンスを生成して、それをPersonsオブジェクト自身にidをプロパティとして追加するというものですね。
ちなみに、recordはid,name,gender,birthdayを要素として持つ配列ですね。
オブジェクトから指定のプロパティを削除するメソッド
今度は、Personsオブジェクトから、指定したidのPersonオブジェクトを削除するremoveメソッドです。
オブジェクトからプロパティを削除するには、delete演算子を使いますね。
それを使って作成したdeleteメソッドがこちらです。
Persons.prototype.remove = function(id){
delete this[id];
};
プロパティを追加・削除するメソッドの動作確認
では、Personsオブジェクトにプロパティを追加するメソッド、およびPersonsオブジェクトからプロパティを削除するメソッドの動作確認をしていきましょう。
検証用の関数myFunctionはこちら。
function myFunction() {
var persons = new Persons();
persons.add(['a04', 'Jay', 'male', new Date('1995/7/7')]);
persons.remove('a01');
Logger.log(persons);
// for(var id in persons){
// persons[id].log();
// }
}
8~10行目がコメントアウトされているのは…ちょっと意味がありますので、それについては後日解説します。
それで、検証としては6行目に以下のようにブレークポイントを置いて、虫アイコンによる「デバッグ実行」を使ってみようと思います。
デバッグ実行をするとブレークポイントで止まりますので、その時点でpersons→a04と開いていくと、以下のように内容を確認できます。
a04プロパティの追加と、a01削除のプロパティを確認できましたね。
まとめ
以上、Google Apps Scriptで自作オブジェクトについてプロパティを追加・削除するメソッドの作り方をお伝えしました。
追加するプロパティに値を代入すれば追加、削除はdelete演算子ですね。
次回は、Personsクラスについてループを回すときに困ったことが起こるので、その点を解決していきます。

どうぞお楽しみに!




