Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

317
Vistas
Polyfill para bind incluye el uso de call o apply, ¿por qué?

El polyfill de bind que encuentro en línea es algo así como:

 Function.prototype.bind = function(obj, ...args) { const self = this; return function(...args2) { return self.apply(obj, [...args, ...args2]); }; }

donde usamos call/apply para llamar a la función.

Mi pregunta es ¿por qué no simplificarlo para que sea

 Function.prototype.myBind = function (obj, ...args) { obj.func = this; return function (...params) { return obj.func(...args, ...params) } };

porque internamente tanto la call como la apply asignan la función al objeto y luego la ejecutan.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Haciendo

 obj.func = this;

está mutando el objeto pasado. .bind no hace tal cosa, y casi siempre es una buena idea no mutar objetos que no "posee" (es decir, solo son utilizados por su propio código interno).

Sería bastante extraño que una llamada a .bind resulte en una mutación de un objeto que puede no estar relacionado con la persona que llama, por ejemplo:

 Function.prototype.myBind = function (obj, ...args) { obj.func = this; return function (...params) { return obj.func(...args, ...params) } }; const obj = { foo: 'foo' }; function fn() { console.log(this); } const boundFn = fn.myBind(obj); console.log(Object.keys(obj));

Es mucho más seguro y predecible evitar los efectos secundarios y mantener la función enlazada dentro del cierre de .bind que establecerla en un objeto externo que no espera que aparezca una nueva propiedad de repente.

En cuanto al título:

Polyfill para bind incluye el uso de call o apply, ¿por qué?

IIRC, .bind se introdujo en ES5. Pero .apply existe en ES3, y dado que básicamente todos los entornos que cualquiera usa son al menos ES3, usar .apply para polyfill .bind es seguro. (aunque el uso de la sintaxis de propagación/descanso no lo es, ya que es ES2015)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda