这是我的第一个问题,所以请保持温和。
我正在尝试创建一个对象数组,其中对象包含一个检索数据的方法/函数。
所以最终我不想使用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;
}
答案 0 :(得分:5)
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 ' 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
方法添加到代码中存在的任何数组中。