Associating data with an object without adding properties to it

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Justin Constantino

    Associating data with an object without adding properties to it

    I'm looking for the best way to have a function associate some bit of
    data with an object so that it can recall it later, but without adding
    any properties to the object - either because the data shouldn't be
    seen or accessible by the user, or because the object is a host object
    and doesn't necessarily allow properties to be added to it (from what I
    understand). Basically, I want to do something like this:

    function setData(obj, val) {
    obj["someProp"] = val;
    }
    function getData(obj) {
    return obj["someProp"];
    }

    without having to add -someProp- to -obj-. The only way I've come up
    with is this:

    var data = [];
    function setData(obj, val) {
    var n = 0;
    while(n < data.length && data[n][0] != obj) n++;
    data[n] = [obj, val];
    }
    function getData(obj) {
    var n = 0;
    while(n < data.length && data[n][0] != obj) n++;
    return data[n] && data[n][1];
    }

    but since it requires that every item in the array be iterated over,
    it's much slower than the original solution when it's used with a lot
    of objects. Is there any better/more efficient way to do this?

  • Baconbutty

    #2
    Re: Associating data with an object without adding properties to it

    Using closures may give you a partial answer, at least for your own
    objects.

    It may be of no assistance for host objects, and it also involves
    creating two methods.

    function myObject()
    {
    var p={};

    this.setPrivate =function(a,b)
    {
    p[a]=b;
    }

    this.getPrivate =function(a,b)
    {
    return p[a];
    }
    }

    function fTest()
    {
    var oObj1=new myObject();
    var oObj2=new myObject();

    oObj1.setPrivat e("Test",2);
    oObj2.setPrivat e("Test",3);

    alert(oObj1.get Private("Test") );
    alert(oObj2.get Private("Test") );
    }

    Comment

    • Baconbutty

      #3
      Re: Associating data with an object without adding properties to it

      Also, it may help if you could explain with an example the context.
      I.e. for what purposes would you wish to associate specific data with a
      specific object other than as a property.

      Comment

      Working...