-
Notifications
You must be signed in to change notification settings - Fork 4
/
660.txt
94 lines (66 loc) · 5.36 KB
/
660.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
[37] [[Web IDL]] には[[拡張属性]]として [DFN[[CODE(IDL)@en[[[Global]]]]]]、
[DFN[[CODE(IDL)[[[PrimaryGlobal]]]]]] があり、[[インターフェイス]]に指定できます [SRC[>>36]]。
* 仕様書
[REFS[
- [36] [CITE[Web IDL (Second Edition)]] ([TIME[2014-02-10 21:45:38 +09:00]] 版) <http://heycam.github.io/webidl/#Global>
]REFS]
* 文脈
[55] これらの[[拡張属性]]を同時には指定できません [SRC[>>36]]。
[56] [CODE(IDL)@en[[[PrimaryGlobal]]]] [[拡張属性]]を指定できるのは、
いずれか1つの[[インターフェイス]]だけです [SRC[>>36]]。
この[[拡張属性]]が指定されたものを[DFN[[RUBYB[[[一次大域インターフェイス]]]@en[primary global interface]]]]といいます
[SRC[>>36]]。
;; [1] 実用上、これは [CODE(DOMi)@en[[[Window]]]] [[インターフェイス]]のことです。
[45] これらの[[拡張属性]]を[[部分インターフェイス定義]]に指定する場合は、
その[[部分インターフェイス定義]]で[[名前付き特性取得子]]も定義していなければ[['''なりません''']]
[SRC[>>36]]。
;; [48] [CODE(IDL)@en[[[partial]]]] でない [CODE(IDL)@en[[[interface]]]]
なら、[[名前付き特性]]が定義されていなくても構わないようです。
* 作用と制約
[38] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]は、
[[ECMAScript環境]]で[[大域オブジェクト]]として使うことができます [SRC[>>36]]。
[46] これらの[[拡張属性]]が指定された[[インターフェイス]]は、
同じ [[ECMAScript大域環境]]においてそれを[[実装]]する[[オブジェクト]]を複数持つことができません
[SRC[>>36]]。これは、[[名前付き特性]]が[[プロトタイプ鎖]]中に現れるため、
複数存在するとすべての[[オブジェクト]]が同じ[[名前付き特性]]群を共有してしまうためです
[SRC[>>36]]。
;; [47] 複数の [CODE(DOMi)@en[[[Window]]]] ([CODE(DOMi)@en[[[WindowProxy]]]])
[[オブジェクト]]が同時に存在することがあるように、
同じ[[インターフェイス]]を[[実装]]していながらも異なる[[ECMAScript大域環境]]由来の[[オブジェクト]]なら複数存在することがあります。
[40] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
当該[[インターフェイス]]や[[派生的インターフェイス群]]の[[インターフェイスメンバー]]は、
[[インターフェイスプロトタイプオブジェクト]]ではなく、
[[オブジェクト]]自体に現れます [SRC[>>36]]。
[52] これらの[[拡張属性]]が指定された[[インターフェイス]]については、
当該[[インターフェイス]]と[[派生的インターフェイス群]]にわたって[[インターフェイスメンバー]]の名前が衝突したり、
[[文字列化器]]、[[直列化器]]、[[反復器]]がそれぞれ複数あったりしては[['''なりません''']]
[SRC[>>36]]。
[39] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
[[名前付き特性]]は、その[[オブジェクト]]自体ではなく、[[プロトタイプ鎖]]中にある[[名前付き特性オブジェクト]]に現れます
[SRC[>>36]]。
[41] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
[[名前付き特性]]の[[設定子]]、[[作成子]]、[[削除子]]を定義しては[['''なりません''']]
[SRC[>>36]]。
[42] これらの[[拡張属性]]が指定された[[インターフェイス]]には、
[CODE(IDL)@en[[[OverrideBuiltins]]]] [[拡張属性]]を指定しては[['''なりません''']]
[SRC[>>36]]。また [CODE(IDL)@en[[[OverrideBuiltins]]]]
[[拡張属性]]が指定された[[インターフェイス]]を[[継承]]しては[['''なりません''']]
[SRC[>>36]]。
;; [43] [CODE(IDL)@en[[[OverrideBuiltins]]]] [[拡張属性]]は[[インターフェイスメンバー]]と[[名前付き特性]]が同じ[[オブジェクト]]に存在していないと使えません。
[44] これらの[[拡張属性]]が指定された[[インターフェイス]]を他の[[インターフェイス]]が[[継承]]することはできません
[SRC[>>36]]。
* 引数
[53] これらの[[拡張属性]]は、[[引数]]なしか、
[[識別子リスト]]のいずれかでなければなりません [SRC[>>36]]。
;; [70] [[識別子]]1つだけの指定は認められていません。
[54] [[識別子リスト]]があれば、それらの[[識別子]]が[[大域名]]となります。
なければ、[[インターフェイス名]]が[[大域名]]となります。 [SRC[>>36]]
* 実例
[49] [CODE(DOMi)@en[[[Window]]]] が [CODE(IDL)@en[[[PrimaryGlobal]]]]
[[拡張属性]]つきです。
[50] [CODE(DOMi)@en[[[DedicatedWorker]]]] が
[CODE(IDL)@en[[[Global]]=([[Worker]],[[DedicatedWorker]])]] [[拡張属性]]つきです。
[51] [CODE(DOMi)@en[[[SharedWorker]]]] が
[CODE(IDL)@en[[[Global]]=([[Worker]],[[SharedWorker]])]] [[拡張属性]]つきです。
[66] [CODE(DOMi)@en[[[ServiceWorker]]]] が
[CODE(IDL)@en[[[Global]]]] [[拡張属性]]つきです。