Reputation: 65
This is my first question, so please be gentle.
I'm trying to create an array of objects, where the object includes a method/function to retrieve data.
So eventually I don't want to use getFirstName(arrayName, arrayNumber)
, but instead use something like
aliens[x].getFirstName;
or
persons.first.getFirstName;
If it's not possible in Javascript, or possible in this manner, please suggest the next best thing.
var persons = [
{
firstname : "John",
lastname : "Doe",
age : 50,
eyecolor : "blue",
},
{
firstname : "Jane",
lastname : "Siyabonga",
age : 39,
eyecolor : "brown",
},
]
var aliens = [
{
firstname : "Bob",
lastname : "the Alien",
age : 350,
eyecolor : "yellow",
},
{
firstname : "xblanque",
lastname : "the Predator",
age : 19,
eyecolor : "red",
},
]
function getFirstName(arrayName, arrayNumber)
{
var x = arrayName[arrayNumber].firstname;
return x;
}
Array.prototype.getLastName=function()
{
var x = this.lastname;
return x;
}
Upvotes: 3
Views: 165
Reputation: 1632
aliens[x].firstname;
works fine. But, as @jAndy suggested, you can make use of getters and setters, like any OOP language.
function Alien( firstname, lastname, age, eyecolor) { // constructor
// ...
this.getFirstName = function() {
return firstname;
};
}
var aliens = [
new Alien("Bob", "the Alien", 350, "yellow"),
new Alien("xblanque", "the Predator", 19, "red")
];
console.log(aliens[0].getFirstName()); // will output "Bob"
Also, beware Array.prototype
manipulation: you are adding getLastName
method to any array present in your code.
Upvotes: 1
Reputation: 236202
ECMAscript supports getter
and setter
methods. In any ES5 compatible implementation, we can use it like
var obj = {
foo: 42,
bar: 32,
get getFoo() {
return this.foo;
},
get sum() {
return this.foo + this.bar;
}
};
now we can acces it like
obj.getFoo; // 42
obj.sum; // 74
Another way to create those is ES5's Object.defineProperty
. For instance:
Object.defineProperty(obj, 'getBar', {
get: function() {
return this.bar;
}
});
Upvotes: 5