MisterBrownZA
MisterBrownZA

Reputation: 65

How to create a method/function for array/object

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

Answers (2)

Tasso Evangelista
Tasso Evangelista

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

jAndy
jAndy

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

Related Questions