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

回答編集履歴

4

ソース修正

2021/09/02 20:19

投稿

退会済みユーザー
answer CHANGED
@@ -41,17 +41,17 @@
41
41
 
42
42
  ```javascript
43
43
  const funcs = {
44
- foo(el) {
44
+ foo() {
45
45
  console.log('foo() が呼ばれました。');
46
46
  return 'bar';
47
47
  },
48
48
 
49
- bar(el) {
49
+ bar() {
50
50
  console.log('bar() が呼ばれました。');
51
51
  return 'baz';
52
52
  },
53
53
 
54
- baz(el) {
54
+ baz() {
55
55
  console.log('baz() が呼ばれました。');
56
56
  return 'foo';
57
57
  }
@@ -60,7 +60,7 @@
60
60
  $('div.button').click(function () {
61
61
  const name = $(this).attr('data-func');
62
62
  if (funcs[name]) {
63
- const nextFunc = funcs[name](this);
63
+ const nextFunc = funcs[name]();
64
64
  $(this).attr('data-func', nextFunc).text(nextFunc);
65
65
  }
66
66
  });

3

ソース修正

2021/09/02 20:19

投稿

退会済みユーザー
answer CHANGED
@@ -73,7 +73,7 @@
73
73
  の3つです。
74
74
  このやり方のメリットとして、
75
75
  - 各クリック要素のそれぞれに個別に、foo → bar → baz → foo → ・・・ のサイクルを維持させるために、何らかのコード追加をする必要がない。
76
- - それと追加した`data-`属性の値に応じたスタイルを適用できる点ですかね。こないな感じで。
76
+ - 追加した`data-`属性の値に応じたスタイルを適用できる。こないな感じで。
77
77
  ```css
78
78
  .button[data-func='foo'] {
79
79
  background-color: blue;

2

ソース修正

2021/09/02 18:57

投稿

退会済みユーザー
answer CHANGED
@@ -66,8 +66,8 @@
66
66
  });
67
67
  ```
68
68
  ポイントとしては、
69
- - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。(たとえば `foo()` は文字列 `'bar'` をreturn する)
69
+ - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。
70
- - 各関数は、次に実行するべき関数名の文字列を返すこと。
70
+ - 各関数は、次に実行するべき関数名の文字列を返すこと。(たとえば `foo()` は文字列`'bar'`をreturnする)
71
71
  - 関数の実行後に、当該HTMLの`data-func`属性に、次に実行する関数名を設定すること。
72
72
 
73
73
  の3つです。

1

ソース修正

2021/09/02 18:55

投稿

退会済みユーザー
answer CHANGED
@@ -22,4 +22,72 @@
22
22
  ```
23
23
  としておけば、`operator()` として operatorを呼ぶ度にfuncA, funcB, funcCがサイクリックに実行されます。`reset()`すると、次に実行する関数を先頭のfuncAに戻します。`operator()` の実行時には引数も渡せるよってに。
24
24
 
25
- ➡ [サンプル](https://codepen.io/i8086x/pen/WNOwmqa?editors=1010) :ボタンをクリックされるたびに、aとbの(1)和、(2)積、(3)最大値、(4)割り算したときの商と余り、の4つをサイクリックに実行してその結果を表示します。数字を変えると次に実行する関数を(1)和に戻します。
25
+ ➡ [サンプル](https://codepen.io/i8086x/pen/WNOwmqa?editors=1010) :ボタンをクリックされるたびに、aとbの(1)和、(2)積、(3)最大値、(4)割り算したときの商と余り、の4つをサイクリックに実行してその結果を表示します。数字を変えると次に実行する関数を(1)和に戻します。
26
+
27
+ ## 別のやり方
28
+
29
+ もうひとつ別やり方を挙げときます。
30
+
31
+ たとえば、3つの関数 `foo()`, `bar()`, `baz()` をこの順にサイクリックに呼びたいとしましょか。このときに、これらを実行させるトリガーとなるHTMLの要素に、それをクリックしたときに実行させたい関数の名前を、何らかの `data-`属性で持たせるんや。たとえば `data-func` としましょう。(もっと良い属性名のネーミングがあるかも)
32
+
33
+ こんな感じになるで。
34
+ ```html
35
+ <div class="container">
36
+ <div class="button" data-func="foo">foo</div>
37
+ <div class="button" data-func="foo">foo</div>
38
+ <div class="button" data-func="foo">foo</div>
39
+ </div>
40
+ ```
41
+
42
+ ```javascript
43
+ const funcs = {
44
+ foo(el) {
45
+ console.log('foo() が呼ばれました。');
46
+ return 'bar';
47
+ },
48
+
49
+ bar(el) {
50
+ console.log('bar() が呼ばれました。');
51
+ return 'baz';
52
+ },
53
+
54
+ baz(el) {
55
+ console.log('baz() が呼ばれました。');
56
+ return 'foo';
57
+ }
58
+ }
59
+
60
+ $('div.button').click(function () {
61
+ const name = $(this).attr('data-func');
62
+ if (funcs[name]) {
63
+ const nextFunc = funcs[name](this);
64
+ $(this).attr('data-func', nextFunc).text(nextFunc);
65
+ }
66
+ });
67
+ ```
68
+ ポイントとしては、
69
+ - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。(たとえば `foo()` は文字列 `'bar'` をreturn する)
70
+ - 各関数は、次に実行するべき関数名の文字列を返すこと。
71
+ - 関数の実行後に、当該HTMLの`data-func`属性に、次に実行する関数名を設定すること。
72
+
73
+ の3つです。
74
+ このやり方のメリットとして、
75
+ - 各クリック要素のそれぞれに個別に、foo → bar → baz → foo → ・・・ のサイクルを維持させるために、何らかのコード追加をする必要がない。
76
+ - それと追加した`data-`属性の値に応じたスタイルを適用できる点ですかね。こないな感じで。
77
+ ```css
78
+ .button[data-func='foo'] {
79
+ background-color: blue;
80
+ }
81
+
82
+ .button[data-func='bar'] {
83
+ background-color: red;
84
+ }
85
+
86
+ .button[data-func='baz'] {
87
+ background-color: green;
88
+ }
89
+ ```
90
+
91
+
92
+
93
+ ➡ [サンプル](https://codepen.io/i8086x/pen/WNOxvGQ?editors=1111)