'How to access the class itself from within a class without using its name [duplicate]

Is it possible to access the class itself inside of a classes function:

class MyClass {
  static get myFunction() { return "foo"; }
  
  constructor() {
    console.log(MyClass.myFunction); // "foo" -- it works when using its name. This is what we want but without using the name
    console.log(this.myFunction); //undefined
    console.log(this.prototype.myFunction); //Cannot read property 'myFunction' of undefined
  }

}

new MyClass();

Is it possible to achieve the same as you do with MyClass.myFunction() and access the static methods without using the name of the class (in this case without using MyClass in this example?

Something like this.master.myFunction() (I’m just making master up here it’s obviously not called master)

JSBin: https://jsbin.com/hawituxosu/1/edit?js,console

Is that even possible? Thank you!



Solution 1:[1]

you can use constructor for this

Returns a reference to the Object constructor function that created the instance object

The constructor property has three purposes:

1. Get the class object.

2. Create an new instance

3. Invoke super constructor

class MyClass {
  static get myFunction() { return "foo"; }

  constructor() {
    console.log(this.constructor.myFunction); 
  }

}

new MyClass();

Solution 2:[2]

an option you can do here is to call static method inside an instance method and call that instance method

class MyClass {
  static get myFunction() { return "foo"; }

  constructor() {
    console.log(MyClass.myFunction); // "foo" -- whith using its name it works. This is what we want but without using the name
    console.log(this.constructor.myFunction);
  }
  myFunction2() {
     return this.constructor.myFunction();
  }
}
const master = new MyClass();
master.myFunction2();

Solution 3:[3]

   this.constructor.myFoo

The constructor property helps you here

Solution 4:[4]

You could work around getting to the class name using:

this.__proto__.constructor.name   // MyClass

class MyClass {
  static get myFunction() { return "foo"; }

  constructor() {
    
    console.log(eval(this.__proto__.constructor.name + ".myFunction"));  //foo
  }

}

new MyClass();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Artyom Amiryan
Solution 3
Solution 4 Ahmad