回答編集履歴

5

追記

2020/09/25 12:56

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -155,3 +155,15 @@
155
155
  };
156
156
 
157
157
  ```
158
+
159
+
160
+
161
+ ### 追記
162
+
163
+
164
+
165
+ 取り消しに対応した observe メソッドです。
166
+
167
+
168
+
169
+ [Add 'observe(type)' method which monitor events to HTMLElement in JavaScript](https://gist.github.com/Zuishin/6c5ae7fc66fa31db175bb034878e096d)

4

修正

2020/09/25 12:56

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -155,11 +155,3 @@
155
155
  };
156
156
 
157
157
  ```
158
-
159
-
160
-
161
- ### 追記
162
-
163
-
164
-
165
- よく考えると、Promise の reject メソッドを呼べばいいだけなので、シンプルなもので十分でした。

3

追記

2020/09/24 01:48

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -155,3 +155,11 @@
155
155
  };
156
156
 
157
157
  ```
158
+
159
+
160
+
161
+ ### 追記
162
+
163
+
164
+
165
+ よく考えると、Promise の reject メソッドを呼べばいいだけなので、シンプルなもので十分でした。

2

修正

2020/09/24 01:36

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -133,3 +133,25 @@
133
133
  </html>
134
134
 
135
135
  ```
136
+
137
+
138
+
139
+ ### 追記
140
+
141
+
142
+
143
+ [EventTarget.addEventListener()](https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener) は option に once を渡すことで実行後自動的に削除できますが、将来、実行されなかったものを削除できる仕組みに拡張したいため、あえて removeEventListener() を入れています。
144
+
145
+ 入れないなら次のようにシンプルになります。
146
+
147
+
148
+
149
+ ```JavaScript
150
+
151
+ HTMLElement.prototype.observe = function (type) {
152
+
153
+ return new Promise(resolve => this.addEventListener(type, resolve, {once: true}));
154
+
155
+ };
156
+
157
+ ```

1

修正

2020/09/23 23:40

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -56,7 +56,7 @@
56
56
 
57
57
  HTMLElement.prototype.observe = function (type) {
58
58
 
59
- const handler = resolve => {
59
+ const getHandler = resolve => {
60
60
 
61
61
  const result = () => {
62
62
 
@@ -70,7 +70,7 @@
70
70
 
71
71
  };
72
72
 
73
- return new Promise(resolve => this.addEventListener(type, handler(resolve)));
73
+ return new Promise(resolve => this.addEventListener(type, getHandler(resolve)));
74
74
 
75
75
  };
76
76