blob: b57f82b38e18fc28acc76f5f57ea102fe22f06e4 (
plain)
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
|
// |reftest| shell-option(--enable-private-fields) skip-if(!xulRuntime.shell) -- requires shell-options
// Returns the argument in the constructor to allow stamping private fields into
// arbitrary objects.
class OverrideBase {
constructor(o) {
return o;
}
};
class A extends OverrideBase {
#a = 1;
g() {
return this.#a
}
static gs(o) {
return o.#a;
}
static inca(obj) {
obj.#a++;
}
}
var obj = {};
Object.seal(obj);
new A(obj); // Add #a to obj, but not g.
assertEq('g' in obj, false);
assertEq(A.gs(obj), 1);
A.inca(obj);
assertEq(A.gs(obj), 2);
// Ensure that the object remains non-extensible
obj.h = 'hi'
assertEq('h' in obj, false);
Object.freeze(obj);
A.inca(obj); // Despite being frozen, private names are modifiable.
assertEq(A.gs(obj), 3);
if (typeof reportCompare === 'function') reportCompare(0, 0);
|