更改默认数组类型getterjavascript
我发现没有办法做到这一点。不过,谢谢大家! 我有这样的想法:更改默认数组类型getterjavascript,javascript,oop,Javascript,Oop,我发现没有办法做到这一点。不过,谢谢大家! 我有这样的想法: function f() { var list = [{name: 'test'}, {name: 'test2'}]; } f1.list[0].name // will return 'test' f1.list[1].name // will return 'test2' 我想从函数中的列表中获取属性,我认为有一些方法可以覆盖默认值[],但我真的不知道要查找什么 f[0] // {name: 'test'} f['
function f() {
var list = [{name: 'test'}, {name: 'test2'}];
}
f1.list[0].name // will return 'test'
f1.list[1].name // will return 'test2'
我想从函数中的列表中获取属性,我认为有一些方法可以覆盖默认值[],但我真的不知道要查找什么
f[0] // {name: 'test'}
f['test2'] // {name: 'test2'}
您的
列表
变量将是f()
的私有变量,除非您执行以下两种操作之一
首先,您可以尝试从f()
返回list
,以便获得所需的属性
function f() {
var list = [{name: 'test'}, {name: 'test2'}];
return list;
}
var f = f();
f[0] // {name: 'test'};
f['test'] // will return undefined; we'll come back to this
第二,我认为这个选项可能就是你想要的,当你用“oop”标记这个问题时,你可以把f()
a构造函数:
function f() {
this.list = [{name: 'test'}, {name: 'test2'}];
}
var f1 = new f();
f1['list'][0] // {name: 'test'};
f1.list[0] // will also return {name: 'test'};
f1.list['test'] // still will return undefined...
您无法使用['test']
或['test2']
访问值的原因是因为它们是您的值,而通常情况下,这些值是我们希望使用键在对象中访问的值(在本例中为['name']
或.name
)。所以你可能想要的是这样的:
function f() {
var list = [{name: 'test'}, {name: 'test2'}];
}
f1.list[0].name // will return 'test'
f1.list[1].name // will return 'test2'
希望这能消除混淆。只需使用对象而不是数组:
var byname = {
"test": {name: 'test'},
"test2": {name: 'test2'}
};
// bracket notation:
byname["test2"] // {name: 'test2'}
// dot notation:
byname.test // {name: 'test'}
因为您说过永远不会通过索引访问该结构,所以可以使用无序的键值映射结构。要保存键入,还可以从数组中动态创建该对象:
var list = [{name: 'test'}, {name: 'test2'}];
var byname = {};
for (var i=0; i<list.length; i++)
byname[list[i].name] = list[i];
var list=[{name:'test'},{name:'test2'}];
var byname={};
对于(var i=0;iYou必须使用并实现一个单独的get()
方法。如果var list=[{name:'test},{name:0}];
将f[0]
返回什么?@dfsq它不应该发生,但在这种情况下它应该返回{name:'test}我已经知道这些解决问题的方法,但它们并不完全是我想要的。无论如何,谢谢你,不幸的是,我认为这不可能以我所想的方式解决。我正在编写一个使用webSocket与服务器交互的客户端。问题是我有一个频道列表(类似于IRC)在名为ChannelList的对象内。该对象内有一个列表channels=[]还有一些方法。这里有一段代码,如果它能帮上忙的话:好的,你们的问题是关于如何从ChannelList函数外部访问通道数组吗?或者你们是在试图重写ChannelList,这样它就不用数组了,而是使用其他的东西了吗?我编辑了这个问题,不可能重写[]访问者,我会写一个函数来做我想做的事,谢谢!