質問: ### 前提・実現したいこと GASでLINE_Botを作っています。 プロトタイプベースのオブジェクト指向を行っていますが、 メソッドの上書きに問題があって質問に参りました。 ### 該当のソースコード 下記の通り、pushメソッドで自身の内部にテキストをハッシュに変換して格納する Payload_item クラスがあります。 そして、そのインスタンスのmesを作成し、 また mes自身にメッセージを2つ格納するテストを作成しています。 ``` var Payload_item=function(args){ this.data=[]; } Payload_item.prototype.push=function(){ for(var i=0; i
回答: インスタンスはprototypeを持ちません。そういう発想だとそもそも`mes.prototype.push(1)`としなければならないはずです。 インスタンスになるとき、生成側のprototypeが*proto*に設定される動作をするはずです。 はずっていうのはこれがgoogle app scriptだから厄介なポイントでgasはrhino(の途中のバージョン)なのでオブジェクトが*proto*を持ってません。 gasでjsの勉強をするのはやめたほうがいいです。 また、インスタンス化された後でのメソッドの上書きとしては、その動く方でよいです。良いというかgasではそれしかできない。 そもそもメソッドのオーバーライドはオブジェクトの継承のときにやるもので、抽象オブジェクトの立場に立たないPostItemがnot implementedだったり、インスタンスがメソッドを上書きしたりするという考えかたが筋が悪いです。 クラスを継承して子クラスでメソッドを上書きする方法を、プロトタイプでやってみる、という方向で考えられてはいかがでしょうか。