/
443.txt
55 lines (39 loc) · 2.83 KB
/
443.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[2] [DFN[[RUBYB[コールバックインターフェイス]@en[callback interface]]]]は、[[コールバック関数]]と似ていますが、
[[定数]]を持つ[[インターフェイス]]でもあるものです。
[3] [[著者]]にとっては、[[コールバック関数]]と同じように [[JavaScript]]
[CODE(JS)@en[[[Function]]]] を[[コールバックインターフェイス]]型の値として使うことができます。
[[Webブラウザー]]にとっては、それに加えて[[インターフェイスオブジェクト]]で[[定数]]を[[スクリプト]]に提供する必要があります。
* 代替
[4] [[コールバックインターフェイス]]は旧時代の [[W3C DOM]] との互換性のために用意されているもので、
現在では新たに定義するべきではないと考えられています。
* 一覧
[1] [[コールバックインターフェイス]]には、次のものがあります。
[FIG(list short)[
- [CODE(DOMi)@en[[[EventListener]]]]
- [CODE(DOMi)@en[[[NodeFilter]]]]
]FIG]
[10] [CODE[NodeFilter]] はいくつか[[定数]]を定義しています。
[[大域オブジェクト]] [CODE[Window]] に[[遺物コールバックインターフェイスオブジェクト]]が[[晒され]]ているので、
[CODE(JS)[[[window]].[[NodeFilter]]]] のようにアクセスできます。
[11]
[CODE[EventListener]] は[[定数]]がなく、何も[[晒され]]ていません。
[[利用者オブジェクト]]として使うことができるのみで、
[[プラットフォームオブジェクト]]として[[観測可能]]なものはありません。
* 実現値
[5] [[コールバックインターフェイス]]は、[[利用者オブジェクト]]が[[実装]]できます。
[[プラットフォームオブジェクト]]は[[実装]]できません。つまり、
[[著者]]は[[コールバックインターフェイス]]を[[実装]]した[[オブジェクト]]を作成できますが、
[[利用者エージェント]]は作成できません。
* 歴史
[6] [CITE@en[Callback interface prototype should be Function.prototype, not Object…]]
([[ayg]]著, [TIME[2016-08-29 22:42:20 +09:00]])
<https://github.com/heycam/webidl/commit/6b0eb63d6cba3ff1f90f4ef3e733749ff51751a0>
[7] [CITE@en[Revamp interface bindings (#313)]]
([[tobie]]著, [TIME[2017-02-21 07:17:07 +09:00]])
<https://github.com/heycam/webidl/commit/4a8f57e276369db7ea5fb09974a09b0ca5d276dd>
[8] [CITE@en[Stop claiming callback interfaces are interfaces]]
([[Ms2ger]]著, [TIME[2019-04-04 22:16:59 +09:00]])
<https://github.com/heycam/webidl/commit/b8ff6b125db0059ad015643074a4b80cae2b6063>
[9] [CITE@en[Stop claiming callback interfaces are interfaces by Ms2ger · Pull Request #705 · heycam/webidl]]
([TIME[2020-01-12 12:24:53 +09:00]])
<https://github.com/heycam/webidl/pull/705>