Script Preparation code:
x
 
class Test1 {
  constructor(name) {
    this.name = name;
  }
}
class Test2 {
  constructor(name) {
    this._name = name;
  }
  get name() {
    return this._name;
  }
}
class Test3 {
  constructor(name) {
    Object.defineProperties(this, {
      name: {
        enumerable  : true,
        configurable: false,
        get() {
          return name;
        }
      }
    });
  }
}
class Test4 {
  #name;
  constructor(name) {
    this.#name = name;
  }
  get name() {
    return this.#name;
  }
}
class Test5 extends Test4 {
}
const a20 = new Array(20).fill(undefined);
function test1() {
  const a = new Test1('test');
  return a20.map(() => a.name === 'test');
}
function test2() {
  const a = new Test2('test');
  return a20.map(() => a.name === 'test');
}
function test3() {
  const a = new Test3('test');
  return a20.map(() => a.name === 'test');
}
function test4() {
  const a = new Test4('test');
  return a20.map(() => a.name === 'test');
}
function test5() {
  const a = new Test5('test');
  return a20.map(() => a.name === 'test');
}
Tests:
  • test1

     
    test1();
  • test2

     
    test2();
  • test3

     
    test3()
  • test4

     
    test4();
  • test5 (by extends)

     
    test5();
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    test1
    test2
    test3
    test4
    test5 (by extends)

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 2 years ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
Chrome 110 on Windows
View result in a separate tab
Test name Executions per second
test1 9353361.0 Ops/sec
test2 9555166.0 Ops/sec
test3 830130.4 Ops/sec
test4 9582554.0 Ops/sec
test5 (by extends) 7384350.0 Ops/sec