質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

209閲覧

JSのclass内で定義した関数のスコープ問題

hima-mura.

総合スコア42

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/05/16 08:56

編集2022/05/16 08:56

sample.js

1class zzz{ 2 constructor(h_text){ 3 this.h_text=h_text; 4 } 5 main(){ 6 console.log('start'); // 「start」と表示される 7 this.func(); // 「Hello」と表示される 8 $('.btn').on('click',function(){ 9 console.log('click'); // クリックイベント後、「click」と表示される 10 this.func(); // クリックイベント後、何も表示されない。ここで「Hello」と表示したい。 11 }) 12 } 13 func(){ 14 concsole.log(this.h_text); 15 } 16} 17 18// インスタンス化 19var cl_zzz= new zzz('Hello'); 20cl_zzz.main();

クラスで定義した関数をイベント(今回はクリックイベント)内部で使用したいのですが、関数を呼び出せません。イベント外部では呼び出せるので関数に問題はないと思います。
助言をお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

classからjQeuryを利用する必要ありますか?
onメソッドのコールバックがthisを引き継がない場合は、bindしてやればいいですが

javascript

1 main(){ 2 console.log('start'); 3 $('.btn').on('click',function(){ 4 console.log('click'); 5 this.func(); 6 }.bind(this)) 7 } 8 func(){ 9 console.log(this.h_text); 10 }

こうすると$('.btn').on('click'で本来よびだすべき$(this)的なものが使えなくなります
ちょっと考え方を変えたほうが良いと思います

投稿2022/05/16 09:05

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hima-mura.

2022/05/16 12:03

助言ありがとうございます。確かにbindでthisが上書きされるは使いにくいですね。 クラス内で処理する内容を少なくします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問