tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

bound-construct-derived-class-ctor.js (1460B)


      1 class Base {
      2    constructor(b) {
      3        this.b = b;
      4    }
      5 }
      6 class Derived extends Base {
      7    constructor(a, b) {
      8        super(b);
      9        this.a = a;
     10    }
     11 }
     12 
     13 function testSimple() {
     14    var boundCtor = Derived.bind(null, 1);
     15    for (var i = 0; i < 100; i++) {
     16        var o = new boundCtor(2);
     17        assertEq(o.a, 1);
     18        assertEq(o.b, 2);
     19 
     20    }
     21 }
     22 testSimple();
     23 
     24 function testMegamorphic() {
     25    var ctors = [
     26        function(a, b) { this.a = a; this.b = b; this.c = 1; }.bind(null, 1),
     27        function(a, b) { this.a = a; this.b = b; this.c = 2; }.bind(null, 1),
     28        function(a, b) { this.a = a; this.b = b; this.c = 3; }.bind(null, 1),
     29        function(a, b) { this.a = a; this.b = b; this.c = 4; }.bind(null, 1),
     30        function(a, b) { this.a = a; this.b = b; this.c = 5; }.bind(null, 1),
     31        function(a, b) { this.a = a; this.b = b; this.c = 6; }.bind(null, 1),
     32        function(a, b) { this.a = a; this.b = b; this.c = 7; }.bind(null, 1),
     33        function(a, b) { this.a = a; this.b = b; this.c = 8; }.bind(null, 1),
     34        function(a, b) { this.a = a; this.b = b; this.c = 9; }.bind(null, 1),
     35        function(a, b) { this.a = a; this.b = b; this.c = 10; }.bind(null, 1),
     36        Derived.bind(null, 1),
     37        Derived.bind(null, 1),
     38    ];
     39    for (var i = 0; i < 100; i++) {
     40        var ctor = ctors[i % ctors.length];
     41        var o = new ctor(2);
     42        assertEq(o.a, 1);
     43        assertEq(o.b, 2);
     44    }
     45 }
     46 testMegamorphic();