I have this object:
JavaScript
x
16
16
1
function formBuddy()
2
{
3
var fields = new Array();
4
var labels = new Array();
5
var rules = new Array();
6
var count=0;
7
8
this.addField = function(field, label, rule)
9
{
10
fields[count] = field;
11
labels[field] = label;
12
rules[field] = rule;
13
count = ++count;
14
}
15
}
16
Its used in this way:
JavaScript
1
4
1
var cForm=new formBuddy();
2
cForm.addField("c_first_name","First Name","required");
3
cForm.addField("c_last_name","Last Name","required");
4
The problem is, in the addField()
function the fields
array is being set correct (perhaps because a numerical index is being used to refer to it) but the other 2 arrays (labels
and rules
) aren’t being touched at all. Doing a console.log
shows them as empty in firebug.
What do I need to change to make them work? I’d still like to refer to the rules and labels by the string index of the field.
Advertisement
Answer
Use objects instead:
JavaScript
1
16
16
1
function formBuddy()
2
{
3
var fields = {};
4
var labels = {};
5
var rules = {};
6
var count = 0;
7
8
this.addField = function(field, label, rule)
9
{
10
fields[count] = field;
11
labels[field] = label;
12
rules[field] = rule;
13
count++;
14
}
15
}
16
But as Christoph already mentioned, I would store this information in a single data structure too. For example:
JavaScript
1
19
19
1
function formBuddy() {
2
var fields = {};
3
this.addField = function(name, label, rule) {
4
fields[name] = {
5
name: name,
6
label: label,
7
rule: rule
8
};
9
};
10
this.getField = function(name) {
11
return fields[name];
12
};
13
}
14
15
var cForm=new formBuddy();
16
cForm.addField("c_first_name","First Name","required");
17
cForm.addField("c_last_name","Last Name","required");
18
alert(cForm.getField("c_last_name").label);
19