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

Javascript 如何为数组/对象创建方法/函数,javascript,Javascript,这是我的第一个问题,所以请温柔一点 我试图创建一个对象数组,其中对象包含一个检索数据的方法/函数 所以最终我不想使用getFirstName(arrayName,arrayNumber),而是使用 aliens[x].getFirstName; 或 如果在Javascript中不可能,或者以这种方式不可能,请建议下一个最好的方法 var persons = [ { firstname : "John", lastname : "Doe", age : 5

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

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

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

aliens[x].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;
}

ECMAscript支持
getter
setter
方法。在任何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的
对象。defineProperty
。例如:

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

外星人[x]。名字工作正常。但是,正如@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
方法添加到代码中存在的任何数组中。

请看这篇文章,它处理的是同一个问题。getter和setter都很棒!我从来没有听说过ECMAscript,因为我是自学成才的程序员。我现在要用谷歌搜索它,但我想知道它是否在所有/大多数浏览器中都是默认的?如果我使用这个,它会工作吗?@MisterBrownZA:ECMAscript和JavaScript是其中之一。为了兼容性,它将100%适用于所有最新的浏览器。它也适用于大多数浏览器的旧版本。只有像IE6-7这样的传统浏览器可能会有这种语法问题。这就是我担心的,我认为这是错误的。只是确认一下,当你说new Alien(“,”,“,”,“,”)时,你是从上面调用函数,还是在创建一个对象?@MisterBrownZA正在创建一个对象,因为我使用
Alien
作为构造函数。您必须了解,在Javascript中,一切行为都像一个对象。关于函数,你必须注意“闭包”的概念。当使用操作符
new
调用函数时,在函数的闭包中分配一个对象,其引用是
this
。另外,
new
确保将返回
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"