Me preguntaba cómo se implementan los objetos bajo el capó en los motores Javascript (V8, Spidermonkey, etc.). ¿Son realmente solo Hash Tables? Si es así, ¿cómo manejan las colisiones?Debajo del capó, ¿los objetos de Javascript tienen tablas hash?
Respuesta
En primer lugar, la respuesta es probablemente algo diferente para diferentes motores JS. Además, supongo que usted está preguntando específicamente sobre el almacenamiento de la propiedad; Obviamente, los objetos también tienen un montón de otros estados (el enlace de cadena del prototipo es obvio).
En el caso de Spidermonkey, los objetos básicamente tienen una lista vinculada de pares (propname, infromation about property), hasta que tienen demasiadas propiedades, cuando creo que todavía conservan la lista vinculada (porque el orden es importante para las propiedades en JS en la práctica), pero agregue una tabla hash fuera de banda que correlaciona los nombres de las propiedades con las entradas de la lista vinculada.
También puede haber otras razones para el cambio a la tabla hash; los detalles no se han corregido con el tiempo y probablemente estén sujetos a cambios en el futuro.
Las listas vinculadas y las tablas hash se comparten realmente entre objetos; siempre que dos objetos tengan los mismos nombres de propiedad y la información de propiedad correspondiente (que NO incluye el valor, para propiedades con un valor almacenado) y las propiedades se establecieron en el mismo orden, pueden compartir la lista de propiedad vinculada.
Los valores reales de propiedad, cuando se deben almacenar, se almacenan en una matriz en el objeto (o más precisamente, dos matrices; una asignada en línea con el objeto, cuyo tamaño se fija en el tiempo de creación de objeto, uno asignados dinámicamente y redimensionados según sea necesario para las propiedades que se agregan más adelante).
Sí, son tablas hash. Aunque no entiendo su parte de colisión, explique la segunda parte de su pregunta
- 1. Operaciones atómicas: debajo del capó
- 2. PHP flock() - ¿Qué hay debajo del capó?
- 3. ¿Cómo se diferencia IEnumerable de IObservable debajo del capó?
- 4. Encuadernación de parámetros: ¿Qué sucede debajo del capó?
- 5. Imprimir objetos y unicode, ¿qué hay debajo del capó? ¿Cuáles son las buenas pautas?
- 6. ¿Qué usa Flash VM debajo del capó para dibujar?
- 7. ¿Cómo implementa Java el patrón de peso mosca para la cuerda debajo del capó?
- 8. ¿Cómo funciona realmente la fusión de una rama (debajo del capó)?
- 9. ¿Cómo obtener el recuento de tablas hash de JavaScript?
- 10. Tablas hash en prolog
- 11. ¿Cómo se observan las tablas hash JavaScript en Knockout?
- 12. hash ordenado en JavaScript
- 13. tablas hash en powershell
- 14. Hacer 2 tablas tienen los mismos tamaños de columna
- 15. ¿Los objetos Ruby tienen un límite de tamaño?
- 16. Búsqueda de tablas hash: con hash perfecto, en C
- 17. ¿Las tablas de datos ADO.Net tienen índices?
- 18. Tablas hash VS matrices asociativas
- 19. Igualdad en tablas hash Ocaml
- 20. Java 2 hash del hash
- 21. Arrastrar UIView debajo del dedo
- 22. Coloque los elementos flotados directamente uno debajo del otro
- 23. ¿Qué sucede si dos objetos diferentes tienen el mismo código hash?
- 24. Cómo corregir TypeError: ¿Los objetos Unicode deben codificarse antes del hash?
- 25. ¿Cómo usar tablas Hash (diccionarios) en MATLAB?
- 26. ¿Puedes tener tablas hash en lisp?
- 27. ¿Demasiadas a muchas tablas tienen una clave principal?
- 28. Hash edificio mediante la agrupación de matriz de objetos basado en una propiedad de los objetos
- 29. En Javascript, ¿por qué los objetos Date tienen los métodos valueOf y getTime si hacen lo mismo?
- 30. Herencia bajo el capó
Consulte esta respuesta http://stackoverflow.com/a/6602088/8338 –
posible duplicado de [¿Cómo implementa JavaScript VM el acceso a la propiedad Objeto? ¿Es Hashtable?] (Http://stackoverflow.com/questions/6586670/how-does-javascript-vm-implements-object-property-access-is-it-hashtable) – Newtang