3

这是我的第一个问题,所以请温柔一点。

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

所以最终我不想使用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;
}
4

2 回答 2

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

创建这些的另一种方法是ES5Object.defineProperty。例如:

Object.defineProperty(obj, 'getBar', {
    get: function() {
        return this.bar;
    }
});
于 2013-05-06T13:46:23.447 回答
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方法。

于 2013-05-06T13:54:23.960 回答