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

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

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

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

Q&A

解決済

2回答

1291閲覧

JavaScriptのthis

usmysa

総合スコア19

JavaScript

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

0グッド

1クリップ

投稿2017/07/22 06:51

ソースコード

JavaScript

1 2function HogeHoge(val_a, val_b){ 3 if (typeof HogeHoge.instance === "object"){ 4 return HogeHoge.instance; 5 } 6 7 var get_val_by_ajax = function() { 8 return $.ajax({ 9 ... 10 ... 11 ... 12 }); 13 } 14 15 this.update_val = function() { 16 get_val_by_ajax().done(function(result) { 17 this.val_a = result['val_a']; 18 this.val_b = result['val_b']; 19 20 // その他の処理 21 }); 22 } 23 24 this.val_a = val_a; 25 this.val_b = val_b; 26 HogeHoge.instance = this; 27 return this; 28} 29 30$(function(){ 31 var hoge = new HogeHoge('A', 'B'); 32 hoge.update_val(); 33}); 34

以上のようにval_aとval_bの値をajaxを用いて更新したいんですが、

JavaScript

1this.update_val = function() { 2 get_val_by_ajax().done(function(result) { 3 this.val_a = result['val_a']; 4 this.val_b = result['val_b']; 5 6 // その他の処理 7 }); 8}

this.val_aのthisがインスタンスのthisではなく、
メソッドのthisが呼ばれてしまいます。
ちなみに、get_val_by_ajax().done(function(result) を用いているのは
同期処理で値を更新したいからです。

そのため、現状ではシングルトンを用いて
インスタンスを生成してから、値を更新しています。

JavaScript

1this.update_val = function() { 2 get_val_by_ajax().done(function(result) { 3 var hoge = HogeHoge(); 4 hoge.val_a = result['val_a']; 5 hoge.val_b = result['val_b']; 6 7 // その他の処理 8 }); 9}

このような書き方ではなく、
インスタンスのthisを呼びたいんですが、どのように書き変えればよろしいでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

アロー関数をつかって

Javascript

1this.update_val = function() { 2 get_val_by_ajax().done(result=>{ 3 this.val_a = result['val_a']; 4 this.val_b = result['val_b']; 5 6 // その他の処理 7 }); 8}

とできますよ。

(アロー関数はthisをBindする)

投稿2017/07/22 09:32

編集2017/07/22 09:34
SorrowBlue

総合スコア26

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

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

usmysa

2017/07/26 07:32

ありがとうございます!
guest

0

thisを変数に入れて、そちらを使いましょう。

javascript

1this.update_val = function() { 2 var _this = this; 3 get_val_by_ajax().done(function(result) { 4 _this.val_a = result['val_a']; 5 _this.val_b = result['val_b']; 6 7 // その他の処理 8 }); 9}

投稿2017/07/22 07:06

maisumakun

総合スコア145183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問