Associating data with an object without adding properties to it

J

Justin Constantino

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?
 
B

Baconbutty

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.setPrivate("Test",2);
oObj2.setPrivate("Test",3);

alert(oObj1.getPrivate("Test"));
alert(oObj2.getPrivate("Test"));
}
 
B

Baconbutty

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,830
Latest member
HeleneMull

Latest Threads

Top