ライブラリで既存クラスを拡張するとTypeError

結論

既存クラスを拡張したライブラリを,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が発生する.