分からない点
Arrayを継承したサブクラス (以下"newArray"とします) からArrayのmapメソッドを呼び出そうとしているのですが、この際、意図せぬタイミングでnewArrayのコンストラクタが呼び出されてしまう原因を知りたいと考えています。
ソースコード例
JavaScript
1(()=>{ 2 class newArray extends Array{ 3 constructor(f, x){ 4 super(...x); 5 this.f = f; 6 return this; 7 } 8 9 add(y){ 10 const temp = this.map((e, i) => e + y[i]); 11 return new newArray(this.x, temp); 12 } 13 } 14 15 const a = new newArray(undefined, [1, 2, 3]); 16 const b = a.add([0, 1, 2]); 17 18 console.log(a, b); 19})();
- コンソールに"[1, 2, 3], [1, 3, 5]"と出力されることを期待しています。
- (コンソールでの確認を目的としているため)グローバルで関数・変数定義されないように無名関数で囲んでいます。
- コンストラクタ引数やプロパティとしてののfにはxを引数に取る関数を入れる予定ですが、主旨とあまり関係ないため処理等の記述を割愛しています。
エラーメッセージ
上記コードをFirefox (91.0.1 64ビット) のコンソールにそのまま貼り付けて実行した際のエラー出力です。Chrome/Edgeでも同様でした。
最も環境は関係なく、仕様の理解不足によるものと考えていますが…。
Uncaught TypeError: x is undefined newArray debugger eval code:4 add debugger eval code:10 <anonymous> debugger eval code:16 <anonymous> debugger eval code:19 debugger eval code:4:13
試したこと
以下について確認したのですが結局原因は掴めず、お知恵を拝借したい所存です。
- 10行目のmapメソッド呼び出しの直前(?)にnewArrayのコンストラクタ呼び出しが発生していること
- コンストラクタの引数が(f = 3, x = undefined) で呼び出されており、xの展開に失敗していること
- this.map ⇒ super.map に変えても変化ないこと
以上です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/21 14:40
2021/08/21 14:58
2021/08/22 02:52