回答編集履歴

4

ソース修正

2021/09/02 20:19

投稿

退会済みユーザー
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  const funcs = {
86
86
 
87
- foo(el) {
87
+ foo() {
88
88
 
89
89
  console.log('foo() が呼ばれました。');
90
90
 
@@ -94,7 +94,7 @@
94
94
 
95
95
 
96
96
 
97
- bar(el) {
97
+ bar() {
98
98
 
99
99
  console.log('bar() が呼ばれました。');
100
100
 
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- baz(el) {
107
+ baz() {
108
108
 
109
109
  console.log('baz() が呼ばれました。');
110
110
 
@@ -122,7 +122,7 @@
122
122
 
123
123
  if (funcs[name]) {
124
124
 
125
- const nextFunc = funcs[name](this);
125
+ const nextFunc = funcs[name]();
126
126
 
127
127
  $(this).attr('data-func', nextFunc).text(nextFunc);
128
128
 

3

ソース修正

2021/09/02 20:19

投稿

退会済みユーザー
test CHANGED
@@ -148,7 +148,7 @@
148
148
 
149
149
  - 各クリック要素のそれぞれに個別に、foo → bar → baz → foo → ・・・ のサイクルを維持させるために、何らかのコード追加をする必要がない。
150
150
 
151
- - それと追加した`data-`属性の値に応じたスタイルを適用できる点ですかね。こないな感じで。
151
+ - 追加した`data-`属性の値に応じたスタイルを適用できる。こないな感じで。
152
152
 
153
153
  ```css
154
154
 

2

ソース修正

2021/09/02 18:57

投稿

退会済みユーザー
test CHANGED
@@ -134,9 +134,9 @@
134
134
 
135
135
  ポイントとしては、
136
136
 
137
- - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。(たとえば `foo()` は文字列 `'bar'` をreturn する)
137
+ - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。
138
138
 
139
- - 各関数は、次に実行するべき関数名の文字列を返すこと。
139
+ - 各関数は、次に実行するべき関数名の文字列を返すこと。(たとえば `foo()` は文字列`'bar'`をreturnする)
140
140
 
141
141
  - 関数の実行後に、当該HTMLの`data-func`属性に、次に実行する関数名を設定すること。
142
142
 

1

ソース修正

2021/09/02 18:55

投稿

退会済みユーザー
test CHANGED
@@ -47,3 +47,139 @@
47
47
 
48
48
 
49
49
  ➡ [サンプル](https://codepen.io/i8086x/pen/WNOwmqa?editors=1010) :ボタンをクリックされるたびに、aとbの(1)和、(2)積、(3)最大値、(4)割り算したときの商と余り、の4つをサイクリックに実行してその結果を表示します。数字を変えると次に実行する関数を(1)和に戻します。
50
+
51
+
52
+
53
+ ## 別のやり方
54
+
55
+
56
+
57
+ もうひとつ別やり方を挙げときます。
58
+
59
+
60
+
61
+ たとえば、3つの関数 `foo()`, `bar()`, `baz()` をこの順にサイクリックに呼びたいとしましょか。このときに、これらを実行させるトリガーとなるHTMLの要素に、それをクリックしたときに実行させたい関数の名前を、何らかの `data-`属性で持たせるんや。たとえば `data-func` としましょう。(もっと良い属性名のネーミングがあるかも)
62
+
63
+
64
+
65
+ こんな感じになるで。
66
+
67
+ ```html
68
+
69
+ <div class="container">
70
+
71
+ <div class="button" data-func="foo">foo</div>
72
+
73
+ <div class="button" data-func="foo">foo</div>
74
+
75
+ <div class="button" data-func="foo">foo</div>
76
+
77
+ </div>
78
+
79
+ ```
80
+
81
+
82
+
83
+ ```javascript
84
+
85
+ const funcs = {
86
+
87
+ foo(el) {
88
+
89
+ console.log('foo() が呼ばれました。');
90
+
91
+ return 'bar';
92
+
93
+ },
94
+
95
+
96
+
97
+ bar(el) {
98
+
99
+ console.log('bar() が呼ばれました。');
100
+
101
+ return 'baz';
102
+
103
+ },
104
+
105
+
106
+
107
+ baz(el) {
108
+
109
+ console.log('baz() が呼ばれました。');
110
+
111
+ return 'foo';
112
+
113
+ }
114
+
115
+ }
116
+
117
+
118
+
119
+ $('div.button').click(function () {
120
+
121
+ const name = $(this).attr('data-func');
122
+
123
+ if (funcs[name]) {
124
+
125
+ const nextFunc = funcs[name](this);
126
+
127
+ $(this).attr('data-func', nextFunc).text(nextFunc);
128
+
129
+ }
130
+
131
+ });
132
+
133
+ ```
134
+
135
+ ポイントとしては、
136
+
137
+ - 3つの関数をひとつのオブジェクト `funcs`のプロパティとして持たせて、`funcs[name]`でその関数を参照していること。(たとえば `foo()` は文字列 `'bar'` をreturn する)
138
+
139
+ - 各関数は、次に実行するべき関数名の文字列を返すこと。
140
+
141
+ - 関数の実行後に、当該HTMLの`data-func`属性に、次に実行する関数名を設定すること。
142
+
143
+
144
+
145
+ の3つです。
146
+
147
+ このやり方のメリットとして、
148
+
149
+ - 各クリック要素のそれぞれに個別に、foo → bar → baz → foo → ・・・ のサイクルを維持させるために、何らかのコード追加をする必要がない。
150
+
151
+ - それと追加した`data-`属性の値に応じたスタイルを適用できる点ですかね。こないな感じで。
152
+
153
+ ```css
154
+
155
+ .button[data-func='foo'] {
156
+
157
+ background-color: blue;
158
+
159
+ }
160
+
161
+
162
+
163
+ .button[data-func='bar'] {
164
+
165
+ background-color: red;
166
+
167
+ }
168
+
169
+
170
+
171
+ .button[data-func='baz'] {
172
+
173
+ background-color: green;
174
+
175
+ }
176
+
177
+ ```
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+ ➡ [サンプル](https://codepen.io/i8086x/pen/WNOxvGQ?editors=1111)