回答編集履歴

2

再追記に関して

2020/10/29 05:08

投稿

kazatsuyu
kazatsuyu

スコア158

test CHANGED
@@ -121,3 +121,35 @@
121
121
  の部分ですが、 `addEventListener` の使い方がおかしいです。これだと `window.addEventListener` が呼び出されてしまいます。必要なのは `cxhr` インスタンスにイベントリスナを追加することだと思うので、 `cxhr.addEventListener()` を呼びましょう。
122
122
 
123
123
  また、 `bind` をするのもおかしいです。そもそも `bind` の第一引数は `thisObj` ですし、イベントオブジェクトはイベントを発行する側が作成するものです。
124
+
125
+
126
+
127
+ 再追記に関して。
128
+
129
+ `clsOnloadEvent` のようなクラスの定義は不要です。
130
+
131
+
132
+
133
+ ```ts
134
+
135
+ interface xxxOnloadDetail {
136
+
137
+ dt: string;
138
+
139
+ x: number;
140
+
141
+ y: number;
142
+
143
+ }
144
+
145
+ type xxxOnloadEvent = CustomEvent<xxxOnloadDetail>; // 先の回答ではinterfaceを継承しましたがCustomEventはジェネリクスなのでこれだけで良かった
146
+
147
+
148
+
149
+ const events: xxxOnloadEvent = new CustomEvent("xxxonload", { detail: { dt: 'foo', x: 0, y: 0 } });
150
+
151
+ ```
152
+
153
+
154
+
155
+ これだけで十分です

1

追記部分に関して

2020/10/29 05:08

投稿

kazatsuyu
kazatsuyu

スコア158

test CHANGED
@@ -55,3 +55,69 @@
55
55
 
56
56
 
57
57
  なおこの方法では `addEventListener` で登録したイベントリスナは呼び出されますが、 `cxhr` のプロパティに設定したイベントハンドラは呼び出されません。ブラウザ組み込みのDOMのクラスなどは内部的にオブジェクトのプロパティに設定されたイベントハンドラが呼び出される仕組みを持っていますが、ユーザー定義のクラスで同じことはできません。
58
+
59
+
60
+
61
+ 追記部分に関してですが、まず
62
+
63
+
64
+
65
+ ```ts
66
+
67
+ //戻り値用のクラス
68
+
69
+ class xxxOnloadEvent {
70
+
71
+ public dt : string
72
+
73
+ public x : number
74
+
75
+ public y : number
76
+
77
+ }
78
+
79
+ ```
80
+
81
+
82
+
83
+ これはクラスではなくインターフェイスで定義しましょう。
84
+
85
+
86
+
87
+ ```ts
88
+
89
+ interface xxxOnloadDetail {
90
+
91
+ dt: string;
92
+
93
+ x: number;
94
+
95
+ y: number;
96
+
97
+ }
98
+
99
+ interface xxxOnloadEvent extends CustomEvent {
100
+
101
+ detail: xxxOnloadDetail;
102
+
103
+ }
104
+
105
+ ```
106
+
107
+
108
+
109
+ それから、
110
+
111
+
112
+
113
+ ```ts
114
+
115
+ addEventListener("xxxonload", aaakansuu.bind (evt), true)
116
+
117
+ ```
118
+
119
+
120
+
121
+ の部分ですが、 `addEventListener` の使い方がおかしいです。これだと `window.addEventListener` が呼び出されてしまいます。必要なのは `cxhr` インスタンスにイベントリスナを追加することだと思うので、 `cxhr.addEventListener()` を呼びましょう。
122
+
123
+ また、 `bind` をするのもおかしいです。そもそも `bind` の第一引数は `thisObj` ですし、イベントオブジェクトはイベントを発行する側が作成するものです。