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

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

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

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

Q&A

解決済

2回答

1016閲覧

javascript勉強中なのですが、thisの扱いがよくわかりません。。。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

2クリップ

投稿2020/02/20 04:30

thisが何をどう参照しているのかよく分からない

今まで避けていたのですが、理解を深めようとJavaScrpt勉強中です。
thisで躓くといったような記事は散々見かけましたが・・・
自分も例に漏れず躓いてしまいました;;
どうかお力をお貸しください宜しくお願いします。

発生している問題・エラーメッセージ

出力結果がundefinedになる

該当のソースコード

js

1let People = {}; 2 3class Human{ 4 constructor(){ 5 if(this === People.TANAKA){ 6 this.value = 'TANAKA'; 7 }else if(this === People.YAMADA){ 8 this.value = 'YAMADA'; 9 } 10 } 11 get name(){ return this.value } 12} 13 14People = { 15 TANAKA : new Human(), 16 YAMADA : new Human() 17} 18console.log(People.TANAKA.name); //=> undefined

new Human()でそれを指してるはず・・・?

自分の理解では

js

1People = { 2 TANAKA : new Human() //この場合

js

1if(this === People.TANAKA) //thisがPeople.TANAKAになるので

js

1this.value = 'TANAKA'; //this.valueはTANAKAになる

と思っていたんですがどうやら違うようです。
この場合、thisは何を参照しているのでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

constructorの中のコードが動いているタイミングではまだインスタンスが出来ていません。

js

1let People = {}; 2 3class Human{ 4 constructor(){} 5 get name(){ 6 if(this === People.TANAKA){ 7 this.value = 'TANAKA'; 8 }else if(this === People.YAMADA){ 9 this.value = 'YAMADA'; 10 } 11 return this.value; 12 } 13} 14 15People = { 16 TANAKA : new Human(), 17 YAMADA : new Human() 18} 19console.log(People.TANAKA.name); //=> TANAKA 20```**動くサンプル:**[https://jsfiddle.net/65x7unom/](https://jsfiddle.net/65x7unom/)

投稿2020/02/20 04:37

kei344

総合スコア69606

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

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

退会済みユーザー

退会済みユーザー

2020/02/20 04:41

そうだったんですね! 簡潔で分かりやすいご回答ありがとうございますm(_)m newした時点で出来てるものかと思ってました...
guest

0

この場合、thisは何を参照しているのでしょうか?

「新しく生成されたオブジェクト」です。
大雑把に言うと、this = {}です。

new 演算子は、コンストラクター関数を持ったユーザー定義のオブジェクトまたは組込みオブジェクトのインスタンスを生成します。 new のキーワードは以下のことを行います。

  1. 空の JavaScript オブジェクトを生成する
  2. このオブジェクト (のコンストラクター) を他のオブジェクトへリンクする
  3. ステップ 1 で新しく生成されたオブジェクトを this コンテキストとして渡す

new 演算子 - JavaScript | MDN

投稿2020/02/20 04:38

Lhankor_Mhy

総合スコア36960

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

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

退会済みユーザー

退会済みユーザー

2020/02/20 04:42

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問