回答編集履歴
12
test
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
for(let i=youngest; i<=oldest; i++) {
|
46
46
|
this.ageRange.push(i);
|
47
47
|
}
|
48
|
-
return this; // メソッドチェーンを使いたいので this を返す
|
48
|
+
return this; // 要件:メソッドチェーンを使いたいので this を返す
|
49
49
|
}
|
50
50
|
|
51
51
|
// getAgeRange メソッドの実装
|
11
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
※前提として、「(nearly_years_old メソッドに於いて)メソッドチェーンをあえて使用したいがために、nearly_years_old は this を返す(return this している)」ものとします。
|
2
|
+
nearly_years_old が this以外の戻り値を返すパターンの可能性については、ここでは論じません。
|
3
|
+
|
4
|
+
---
|
1
5
|
|
2
6
|
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[処理系の実装に依存している](https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object)ようです。
|
3
7
|
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
10
test
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
|
2
|
-
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[
|
2
|
+
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[処理系の実装に依存している](https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object)ようです。
|
3
|
-
|
4
3
|
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
5
4
|
たとえば、質問にある Person クラスに、「年齢の配列を返す toString メソッド」が実装されていても、
|
6
5
|
```js
|
9
test
CHANGED
@@ -33,25 +33,25 @@
|
|
33
33
|
constructor(name, age) {
|
34
34
|
this.name = name;
|
35
35
|
this.age = age;
|
36
|
-
this.age
|
36
|
+
this.ageRange = [];
|
37
37
|
}
|
38
38
|
|
39
39
|
nearly_years_old() {
|
40
40
|
const youngest = this.age - 5;
|
41
41
|
const oldest = this.age + 5;
|
42
42
|
for(let i=youngest; i<=oldest; i++) {
|
43
|
-
this.age
|
43
|
+
this.ageRange.push(i);
|
44
44
|
}
|
45
45
|
return this; // メソッドチェーンを使いたいので this を返すらしい・・・
|
46
46
|
}
|
47
47
|
|
48
48
|
// getAgeRange メソッドの実装
|
49
49
|
getAgeRange() {
|
50
|
-
return this.age
|
50
|
+
return this.ageRange
|
51
51
|
}
|
52
52
|
}
|
53
53
|
```
|
54
|
-
というように、年齢の配列(age
|
54
|
+
というように、年齢の配列(ageRange) を返すメソッド(上の例ではgetAgeRange()メソッド)を実装しておき、
|
55
55
|
呼び出すほうで、
|
56
56
|
```js
|
57
57
|
person = new Person('John', 30);
|
@@ -62,7 +62,7 @@
|
|
62
62
|
|
63
63
|
```
|
64
64
|
略
|
65
|
-
console.log(person.age
|
65
|
+
console.log(person.ageRange);
|
66
66
|
```
|
67
67
|
とすればよいのではないでしょうか。
|
68
68
|
|
8
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
for(let i=youngest; i<=oldest; i++) {
|
43
43
|
this.agerange.push(i);
|
44
44
|
}
|
45
|
-
return this;
|
45
|
+
return this; // メソッドチェーンを使いたいので this を返すらしい・・・
|
46
46
|
}
|
47
47
|
|
48
48
|
// getAgeRange メソッドの実装
|
7
test
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
|
4
4
|
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
5
5
|
たとえば、質問にある Person クラスに、「年齢の配列を返す toString メソッド」が実装されていても、
|
6
|
-
```
|
6
|
+
```js
|
7
7
|
person = new Person('John', 30);
|
8
8
|
person.nearly_years_old();
|
9
9
|
console.log(person);
|
10
10
|
```
|
11
|
-
の3
|
11
|
+
の3行目の
|
12
12
|
```js
|
13
13
|
console.log(person);
|
14
14
|
```
|
6
test
CHANGED
@@ -2,8 +2,13 @@
|
|
2
2
|
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[ブラウザの実装依存のようです](https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object)。
|
3
3
|
|
4
4
|
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
5
|
-
|
6
|
-
|
5
|
+
たとえば、質問にある Person クラスに、「年齢の配列を返す toString メソッド」が実装されていても、
|
6
|
+
```
|
7
|
+
person = new Person('John', 30);
|
8
|
+
person.nearly_years_old();
|
9
|
+
console.log(person);
|
10
|
+
```
|
11
|
+
の3番目の
|
7
12
|
```js
|
8
13
|
console.log(person);
|
9
14
|
```
|
5
test
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
```js
|
8
8
|
console.log(person);
|
9
9
|
```
|
10
|
-
という記法で 年齢の配列だけを表示させることはできません。(実装によ
|
10
|
+
という記法で 年齢の配列だけを表示させることはできません。(実装によるようですが、そのクラスに実装されているプロパティが全部表示されるようです)
|
11
11
|
|
12
12
|
また、
|
13
13
|
```js
|
4
test
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
|
4
4
|
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
5
5
|
|
6
|
-
つまり、質問にある Person クラスに、「
|
6
|
+
つまり、質問にある Person クラスに、「年齢の配列を返す toString メソッド」が実装されていても、
|
7
7
|
```js
|
8
8
|
console.log(person);
|
9
9
|
```
|
10
|
-
という記法で
|
10
|
+
という記法で 年齢の配列だけを表示させることはできません。(実装によりますが、そのクラスに実装されたプロパティが全部表示されるようです)
|
11
11
|
|
12
12
|
また、
|
13
13
|
```js
|
3
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[ブラウザの実装依存のようです](https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object)。
|
3
3
|
|
4
|
-
少なくとも、Windows の Chromium Edgeでは、log メソッドに 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのメソッドが呼ばれるわけではないようです。
|
4
|
+
少なくとも、Windows の Chromium Edgeでは、log メソッドの引数に 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのtoStringメソッドが呼ばれるわけではないようです。
|
5
5
|
|
6
6
|
つまり、質問にある Person クラスに、「agerange を返す toString メソッド」が実装されていても、
|
7
7
|
```js
|
2
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
console.log() のlog メソッドの引数に何かを指定した場合に、引数に指定されたモノの toString メソッドが呼ばれるかどうかは[ブラウザの実装依存のようです](https://stackoverflow.com/questions/36215379/does-console-log-invokes-tostring-method-of-an-object)。
|
3
3
|
|
4
|
-
少なくとも、Windows の Chrom
|
4
|
+
少なくとも、Windows の Chromium Edgeでは、log メソッドに 独自のObject を指定した場合、その Object に toStringメソッドが実装されていても、自動的にそのメソッドが呼ばれるわけではないようです。
|
5
5
|
|
6
6
|
つまり、質問にある Person クラスに、「agerange を返す toString メソッド」が実装されていても、
|
7
7
|
```js
|
1
test
CHANGED
@@ -11,6 +11,7 @@
|
|
11
11
|
|
12
12
|
また、
|
13
13
|
```js
|
14
|
+
(略)
|
14
15
|
console.log(String(person));
|
15
16
|
```
|
16
17
|
とすると
|