2012-04-21 38 views
10

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?

+1

Consulte esta respuesta http://stackoverflow.com/a/6602088/8338 –

+0

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

Respuesta

5

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).

-1

Sí, son tablas hash. Aunque no entiendo su parte de colisión, explique la segunda parte de su pregunta

+3

La función hash puede devolver la misma clave para diferentes entradas, eso se llama colisión. – stewe

+4

Los objetos JS son _conceptualmente_ hashtables. La implementación real no tiene que ser una tabla hash, y a menudo no lo es. –

+1

Para v8 y spidermonkey son – kishu27

Cuestiones relacionadas