Digamos que quiero pasar una referencia a un método de una clase en JavaScript:
class Example { constructor() { this.field = "value" } exampleMethod() { console.log(this.field) } exampleMethod2() { this.field += "." } } // get references to the methods without having an instance of the object (important detail) let methods = [Example.exampleMethod, Example.exampleMethod2] // not correct let sampledMethod = methods[Math.floor(Math.random()*methods.length)] let object = new Example() object.sampledMethod()Ejemplo extraño, pero digamos que tengo razones más legítimas para querer estas referencias sin una instancia del objeto. ¿Hay una manera limpia de hacerlo?
Los métodos existen en el prototipo del objeto. Para llamar a un método separado en una instancia de objeto, use .call o .apply :
class Example { constructor() { this.field = "value" } exampleMethod() { console.log(this.field) } exampleMethod2() { this.field += "." } } let methods = [Example.prototype.exampleMethod, Example.prototype.exampleMethod2]; let sampledMethod = methods[Math.floor(Math.random() * methods.length)]; let object = new Example(); console.log(object); console.log('Calling', sampledMethod); sampledMethod.call(object); console.log(object);