ライブラリで既存クラスを拡張するとTypeError
Google Apps Scriptで既存クラスを拡張したライブラリを作ると,chrome V8ランタイムでエラーになる.
結論
既存クラスを拡張したライブラリを,chrome V8ランタイムを有効にして使用するとTypeErrorが出る.組合せは以下の通り.
- ライブラリ側,呼出し側どちらもV8ランタイム無効
- 動く
- ライブラリ側はV8ランタイム有効,呼出し側はV8ランタイム無効
- 動く
- ライブラリ側はV8ランタイム無効,呼出し側はV8ランタイム有効
TypeError: class.method is not a function
呼出し側でV8ランタイムを有効にするとTypeError発生,V8ランタイムを無効にすると動く.同一ファイル,または同一プロジェクトの別ファイルに記載すると,V8ランタイムでも使用できる.
発生例
例えば以下の通り.
ライブラリ側
既存クラスDate
を拡張して,メソッドgetNthDate
を追加する.
Date.prototype.getNthDate=function(n){
return new Date(this.valueOf()+n*1000*60*60*24);
}
呼出し(ライブラリを使用する)側
上で作成したライブラリを参照して,Date.getNthDateを使う.
function myFunction() {
const d=new Date();
Logger.log(d);
Logger.log(d.getNthDate(1));
}
実行すると,TypeError: d.getNthDate is not a function
が発生する.