如何为数组/对象创建方法/函数

时间:2013-05-06 13:44:40

标签: javascript

这是我的第一个问题,所以请保持温和。

我正在尝试创建一个对象数组,其中对象包含一个检索数据的方法/函数。

所以最终我不想使用getFirstName(arrayName, arrayNumber),而是使用像

这样的东西
aliens[x].getFirstName;

persons.first.getFirstName;

如果在Javascript中无法实现,或者以这种方式实现,请提出下一个最好的建议。

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;
}

2 个答案:

答案 0 :(得分:5)

ECMAscript支持gettersetter方法。在任何 ES5 兼容的实现中,我们可以像

一样使用它
var obj = {
    foo: 42,
    bar: 32,
    get getFoo() {
        return this.foo;
    },
    get sum() {
        return this.foo + this.bar;
    }
};

现在我们可以像

那样访问它
obj.getFoo;  // 42
obj.sum;     // 74

创建它们的另一种方法是 ES5 ' Object.defineProperty。例如:

Object.defineProperty(obj, 'getBar', {
    get: function() {
        return this.bar;
    }
});

答案 1 :(得分:1)

aliens[x].firstname;运行正常。但是,正如@jAndy建议的那样,你可以像任何OOP语言一样使用getter和setter。

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"

另外,请注意Array.prototype操作:您要将getLastName方法添加到代码中存在的任何数组中。