Junto con Function.prototype.apply y Function.prototype.call , Node.js usa Function.prototype.bind para preservar los métodos de prototipo "primordiales" en una forma utilizable por su biblioteca interna y que no se ve afectada por ninguna mutación en los elementos integrados por parte del usuario. código. Esta es la sección relevante de primordials.js :
// `uncurryThis` is equivalent to `func => Function.prototype.call.bind(func)`. // It is using `bind.bind(call)` to avoid using `Function.prototype.bind` // and `Function.prototype.call` after it may have been mutated by users. const { apply, bind, call } = Function.prototype; const uncurryThis = bind.bind(call); primordials.uncurryThis = uncurryThis; // `applyBind` is equivalent to `func => Function.prototype.apply.bind(func)`. // It is using `bind.bind(apply)` to avoid using `Function.prototype.bind` // and `Function.prototype.apply` after it may have been mutated by users. const applyBind = bind.bind(apply); primordials.applyBind = applyBind; Todo lo que se necesita para guardar Array para el uso de la biblioteca interna es asignarlo a una variable en el ámbito de las bibliotecas internas. Guardar Array.prototype.push para su reutilización es más complicado porque normalmente tiene que ser una propiedad de un objeto para que funcione. uncurryThis(Array.prototype.push) produce una función cuyo primer parámetro es this valor que usa Array.prototype.push , que ahora se puede usar incluso si el código de usuario elimina el método del prototipo de Array .
A diferencia de apply y call , bind no está disponible en motores de JavaScript más antiguos, por lo que no se puede usar para guardar métodos incorporados de preservación. Las funciones "Bound" devueltas por polyfills para Function.prototype.bind que he encontrado hasta ahora están escritas de una manera que es susceptible de romperse si, por ejemplo, apply y call se eliminaron de Function.prototype .
¿Hay alguna forma de polyfill Function.prototype.bind de tal manera que las funciones devueltas por él no puedan romperse con parches de mono?