前提・実現したいこと
canvasでテキスト描画を行う際に、「fillTextかstrokeTextのどちらかの関数を実行するかが決まっているメソッド」を持ったクラスを作り、fillかstrokeかを気にせずにテキスト描画を実行しようと思いました。
そのために、変数にテキスト描画関数を代入し、その変数を操作することで、fillかstrokeかを変更できるようなコードを設計し実行したところ、エラーが発生してしまい困っています。エラー内容から関数として実行しているのは理解できたので、ある程度は予想通りの結果が得られたのですが、なぜ呼び出した関数がcanvasの関数ではないのかが理解できず、解決策がわかりません。
ソースコードはマウスクリックでテキスト描画が行うようになっています。
発生している問題・エラーメッセージ
TypeError: 'fillText' called on an object that does not implement interface CanvasRenderingContext2D.
該当のソースコード
javascript
1let canvas; 2let ctx; 3canvas = document.createElement('canvas'); 4canvas.width = 500; 5canvas.height = 500; 6 7document.body.appendChild(canvas); 8ctx = canvas.getContext('2d'); 9 10class Text{ 11 constructor(ctx){ 12 this.ctx = ctx; 13 this.drawText = this.ctx.fillText; 14 } 15 16 draw(mes, x, y){ 17 this.drawText(mes, x, y); 18 } 19} 20 21let text = new Text(ctx); 22canvas.addEventListener('click', function(){ 23 text.draw('ナナナ', 50, 50); 24})
試したこと
一番簡単な解決策として、メソッド内にif文による条件分岐を設けることによって描画方法を切り替えるやり方がありますが、今回はそれ以外のやり方としてこの方法での解決策を探しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/18 14:23