前提・実現したいこと
GASでLINE_Botを作っています。
プロトタイプベースのオブジェクト指向を行っていますが、
メソッドの上書きに問題があって質問に参りました。
該当のソースコード
下記の通り、pushメソッドで自身の内部にテキストをハッシュに変換して格納する Payload_item クラスがあります。
そして、そのインスタンスのmesを作成し、
また mes自身にメッセージを2つ格納するテストを作成しています。
GAS
1var Payload_item=function(args){ 2 this.data=[]; 3} 4Payload_item.prototype.push=function(){ 5 for(var i=0; i<arguments.length; i=i+1){ 6 this.data.push(this._packed(arguments[i])); 7 } 8} 9Payload_item.prototype._packed=function(){ 10 throw "method _packed is not implemented"; 11} 12 13var mes=new Payload_item({limit:2000}); 14mes.prototype._packed=function(str){ 15 return {type:"text","text":str}; 16} 17 18function mes_test(){//実行する関数 19 mes.push("テスト1","テスト2"); 20 Logger.log(mes.data); 21}
mesはPayload_itemの _packed メソッドの上書きを試みています。
しかし実行すると、
GAS
1TypeError: undefined のプロパティ「packed」を「(class)@7d880f87」に設定できません。
test関数のmes.pushの行で、エラーが発生しました。
試したこと
しかし、以下のようにmesの_packedメソッドからprototypeの記述を欠いたとき、
mesによるメソッド上書きは動作しました。
GAS
1mes._packed=function(str){ 2 return {type:"text","text":str}; 3} 4 5function mes_test(){//実行する関数 6 mes.push("テスト1","テスト2"); 7 Logger.log(mes.data);// [{text=テスト1, type=text}, {text=テスト2, type=text}] 8}
動作は成功ですが、prototypeの表記をなくしたので、メソッドは参照するものではなくなったかもしれません。
メソッドの上書きがこれが正しい方法か、教えて頂きたいです。
補足
前回の質問では、回答とクラス構文の存在を教えていただき有難うございました。
しかし、申し訳なくも、再びプロトタイプベースで質問に参りました。
クラス構文をトランスパイルする手段が一番良いのがもっともです。
ただ今回ばかりは、クラス構文では気にしないであろうこの問題が起きたので、
ES6でちゃんと取り掛かる前に、この問題についてご教授頂きたく参りました。
どうか回答のほど宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 10:29
2019/06/25 12:33