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
|
function testBase(base) {
class instance extends base {
constructor(inst, one) {
super(inst, one);
}
}
let inst = new instance(instance, 1);
assertEq(Object.getPrototypeOf(inst), instance.prototype);
assertEq(inst.calledBase, true);
class defaultInstance extends base { }
let defInst = new defaultInstance(defaultInstance, 1);
assertEq(Object.getPrototypeOf(defInst), defaultInstance.prototype);
assertEq(defInst.calledBase, true);
}
class base {
// Base class must be [[Construct]]ed, as you cannot [[Call]] a class
// constructor
constructor(nt, one) {
assertEq(new.target, nt);
// Check argument ordering
assertEq(one, 1);
this.calledBase = true;
}
}
testBase(base);
testBase(class extends base {
constructor(nt, one) {
// Every step of the way, new.target and args should be right
assertEq(new.target, nt);
assertEq(one, 1);
super(nt, one);
}
});
function baseFunc(nt, one) {
assertEq(new.target, nt);
assertEq(one, 1);
this.calledBase = true;
}
testBase(baseFunc);
let handler = {};
let p = new Proxy(baseFunc, handler);
testBase(p);
handler.construct = (target, args, nt) => Reflect.construct(target, args, nt);
testBase(p);
if (typeof reportCompare === 'function')
reportCompare(0,0,"OK");
|