teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

代替案を提示

2020/10/23 16:16

投稿

miyabi_pudding
miyabi_pudding

スコア9559

answer CHANGED
@@ -1,14 +1,23 @@
1
+ `function`においての`this`は、**実行時においてのthis**を指せますが、
2
+ アロー関数は、**定義時のthis**が実行時の`this`に入るからです。
3
+
4
+ つまり、`getAge`メソッド実行時は、アロー関数では、`user`は指せず、定義時の`this`である、グローバルオブジェクトが指されます。
5
+
6
+ ではどうするかというと、
7
+ まぁ、どうしてもアローなどでやりたいならば、
8
+ `static`なクラスで定義するのがよいのでは?
9
+ と思います。
10
+
1
11
  ```typescript
2
- let user = {
12
+ class user {
3
- name: "ほげ太郎",
13
+ static public name = "ほげ太郎";
4
- age: 22,
14
+ static public age = 22;
5
- address: "ほげ市",
15
+ static public address = "ほげ市";
6
- hobby: ["寝ること", "食べること"],
16
+ static public hobby: strung[] = ["寝ること", "食べること"];
17
+
18
+ static public getAge(){
7
- getAge: () => this.age
19
+ return this.age;
20
+ }
8
21
  };
9
22
  console.log(user.getAge());
10
- ```
23
+ ```
11
- `function`においての`this`は、**実行時においての実行親**を指せますが、
12
- アロー関数は、**定義時の親**が`this`に入るからです。
13
-
14
- つまり、`getAge`メソッド実行時は、アロー関数では、`user`は指せず、定義時の`this`である、グローバルオブジェクトが指されます。