Empecé a aprender sobre las funciones y esta palabra clave. Mientras aprendía sobre la llamada () y su caso de uso, me encontré con dudas sobre los dos escenarios a continuación que producen el mismo resultado
Método de préstamo:
const lufthansa = { airline: 'LUFT', iataCode: 500, bookings: [], book(name) { console.log(`${name} booked Airline: ${this.iataCode}-${this.airline}`) this.bookings.push({booking: `${name} booked Airline: ${this.iataCode}-${this.airline}`}) } } const euroWings = { airline: 'EW', iataCode: 700, bookings: [] } euroWings.book = lufthansa.book lufthansa.book('John') euroWings.book('Adam')
Usando Llamada()
const lufthansa = { airline: 'LUFT', iataCode: 500, bookings: [], book(name) { console.log(`${name} booked Airline: ${this.iataCode}-${this.airline}`) this.bookings.push({booking: `${name} booked Airline: ${this.iataCode}-${this.airline}`}) } } const euroWings = { airline: 'EW', iataCode: 700, bookings: [] } lufthansa.book('John') lufthansa.book.call(euroWings, 'Adam')
¿Cuáles son las diferencias reales y cuándo se debe usar una?
.call()
generalmente se usa cuando no controla los métodos del objeto y desea usar métodos de algún otro objeto.
El ejemplo clásico es el uso de métodos de matriz en objetos "similares a una matriz" que existen en la interfaz web, como NodeList
.
divs = document.getElementByClassName("myclass"); result = [].map.call(divs, function(div) { return div.getAttribute("someattr"); });
Posiblemente podrías hacer
div.map = [].map; result = div.map(function(div) { return div.getAttribute("someattr"); });
pero tomar prestado el método cada vez sería repetitivo.