質問編集履歴

1

最終的なコードの追加

2018/04/15 03:09

投稿

lazex
lazex

スコア604

test CHANGED
File without changes
test CHANGED
@@ -122,15 +122,15 @@
122
122
 
123
123
  const self = this
124
124
 
125
- const listener = function(eve){
125
+ const listener_wrapper = function(eve){
126
126
 
127
127
  listener.call(this, eve, self)
128
128
 
129
129
  }
130
130
 
131
- wmap.set(this, listener)
131
+ wmap.set(this, listener_wrapper)
132
-
132
+
133
- window.addEventListener("click", listener, false)
133
+ window.addEventListener("click", listener_wrapper, false)
134
134
 
135
135
  }
136
136
 
@@ -149,3 +149,67 @@
149
149
 
150
150
 
151
151
  書いてて無理そうな気もしてきたのですが、なにか方法がありそうにも思います。
152
+
153
+
154
+
155
+ # 追記
156
+
157
+
158
+
159
+ 最終的にどうなっている状態かがわかりづらいため全体のコードを追記します。
160
+
161
+ また、上記コードで `listener` が重複していたので修正しました。
162
+
163
+
164
+
165
+ ```js
166
+
167
+ const wmap = new WeakMap()
168
+
169
+
170
+
171
+ class X {
172
+
173
+ setListener(){
174
+
175
+ const self = this
176
+
177
+ const listener_wrapper = function(eve){
178
+
179
+ listener.call(this, eve, self)
180
+
181
+ }
182
+
183
+ wmap.set(this, listener_wrapper)
184
+
185
+ window.addEventListener("click", listener_wrapper, false)
186
+
187
+ }
188
+
189
+ removeListener(){
190
+
191
+ window.removeEventListener("click", wmap.get(this), false)
192
+
193
+ }
194
+
195
+ }
196
+
197
+
198
+
199
+ function listener(eve, x){
200
+
201
+ x.prop = eve.target
202
+
203
+ console.log(x)
204
+
205
+ }
206
+
207
+
208
+
209
+ export { X }
210
+
211
+ ```
212
+
213
+
214
+
215
+ 補足すると EsModules のモジュールのため、 wmap はこのファイル外には公開されていません。