Saltar al contenido

Id. de objeto de JavaScript

Presta atención porque en este post vas a hallar la contestación que buscas.Esta crónica fue evaluado por nuestros especialistas para garantizar la calidad y veracidad de nuestro contenido.

Solución:

Si desea buscar/asociar un objeto con un identificador único sin modificar el objeto subyacente, puede utilizar un WeakMap:

// Note that object must be an object or array,
// NOT a primitive value like string, number, etc.
var objIdMap=new WeakMap, objectCount = 0;
function objectId(object)
  if (!objIdMap.has(object)) objIdMap.set(object,++objectCount);
  return objIdMap.get(object);


var o1=, o2=, o3=a:1, o4=a:1;
console.log( objectId(o1) ) // 1
console.log( objectId(o2) ) // 2
console.log( objectId(o1) ) // 1
console.log( objectId(o3) ) // 3
console.log( objectId(o4) ) // 4
console.log( objectId(o3) ) // 3

Usando un WeakMap en vez de Map asegura que los objetos aún puedan ser recolectados como basura.

No, los objetos no tienen un identificador incorporado, aunque puede agregar uno modificando el prototipo del objeto. He aquí un ejemplo de cómo podrías hacerlo:

(function() 
    var id = 0;

    function generateId()  return id++; ;

    Object.prototype.id = function() 
        var newId = generateId();

        this.id = function()  return newId; ;

        return newId;
    ;
)();

Dicho esto, en general, modificar el prototipo del objeto se considera una práctica muy mala. En cambio, recomendaría que asigne manualmente una identificación a los objetos según sea necesario o use un touch funcionar como otros han sugerido.

En realidad, no es necesario modificar el object prototipo. Lo siguiente debería funcionar para ‘obtener’ identificadores únicos para cualquier objeto, de manera suficientemente eficiente.

var __next_objid=1;
function objectId(obj) 
    if (obj==null) return null;
    if (obj.__obj_id==null) obj.__obj_id=__next_objid++;
    return obj.__obj_id;

valoraciones y reseñas

Al final de la página puedes encontrar las crónicas de otros desarrolladores, tú de igual forma puedes dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *