Script Preparation code:
x
 
class Foo1 {
    property = 5;
    method() {
        this.property += 1;
    }
}
function Bar1() {
    return {
        property: 5,
        method() {
            this.property += 1;
        }
    };
}
function Bar2() {
    let property = 5;
    return {
        method: () => {
            property += 1;
        }
    };
}
var foo1 = new Foo1();
var foo1Apply = foo1.method;
var foo1Bind = foo1.method.bind(foo1);
var bar1 = Bar1();
var bar1Apply = bar1.method;
var bar1Bind = bar1.method.bind(bar1);
var bar2 = Bar2();
var bar2Variable = bar2.method;
Tests:
  • Class: direct

     
    foo1.method();
  • Class: apply

     
    foo1Apply.apply(foo1);
  • Class: bind

     
    foo1Bind();
  • Object literal: direct

     
    bar1.method();
  • Object literal: apply

     
    bar1Apply.apply(bar1);
  • Object literal: bind

     
    bar1Bind();
  • Object with context: direct

     
    bar2.method();
  • Object with context: variable

     
    bar2Variable();
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Class: direct
    Class: apply
    Class: bind
    Object literal: direct
    Object literal: apply
    Object literal: bind
    Object with context: direct
    Object with context: variable

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
Firefox 118 on Windows
View result in a separate tab
Test name Executions per second
Class: direct 398258880.0 Ops/sec
Class: apply 279955200.0 Ops/sec
Class: bind 55733584.0 Ops/sec
Object literal: direct 282577888.0 Ops/sec
Object literal: apply 289969504.0 Ops/sec
Object literal: bind 55094104.0 Ops/sec
Object with context: direct 394821344.0 Ops/sec
Object with context: variable 277841920.0 Ops/sec