Supongo que se supone que cada proveedor lo implemente según las especificaciones
La implementación real, por ejemplo V8 puede ser un poco compleja, consulte esta respuesta para comenzar. También puede referirse a la fuente v8 en github pero puede que no sea fácil entender solo una parte aisladamente.
Citado de la respuesta anterior:
Desarrollador V8 aquí. Tenemos varias técnicas de implementación diferentes para "builtins": algunas están escritas en C ++, otras en Torque, algunas en lo que llamamos CodeStubAssembler y algunas directamente en ensamblador. En versiones anteriores de V8, algunas se implementaron en JavaScript. Cada una de estas estrategias tiene sus propios puntos fuertes (compensando la complejidad del código, la depuración, el rendimiento en diversas situaciones, el tamaño binario y el consumo de memoria); Además, siempre existe la razón histórica de que el código haya evolucionado con el tiempo.
Especificación ES2015:
- Deje O ser ToObject ( este valor).
- ReturnIfAbrupt ( O ).
- Deje que len sea ToLength (Get ( O ,
"length"
)).
- ReturnIfAbrupt ( len ).
- Si IsCallable ( callbackfn ) es falso , arroje una excepción TypeError .
- Si se proporcionó thisArg , deje que T sea thisArg ; de lo contrario, deje que T sea indefinido .
- Deje A ser ArraySpeciesCreate ( O , len ).
- ReturnIfAbrupt ( A ).
- Deje k ser 0.
- Repita, mientras k < len
- Deje que Pk sea ToString ( k ).
- Deje kPresent ser HasProperty ( O , Pk ).
- ReturnIfAbrupt ( kPresent ).
- Si kPresent es verdadero , entonces
- Deje kValue ser Get ( O , Pk ).
- ReturnIfAbrupt ( kValue ).
- Deje que mappedValue sea Call ( callbackfn , T , « kValue , k , O »).
- ReturnIfAbrupt ( mappedValue ).
- Deje que el estado sea CreateDataPropertyOrThrow ( A , Pk , mappedValue ).
- ReturnIfAbrupt ( estado ).
- Aumenta k en 1.
- Volver A .