Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改默认数组类型getterjavascript_Javascript_Oop - Fatal编程技术网

更改默认数组类型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,这样它就不用数组了,而是使用其他的东西了吗?我编辑了这个问题,不可能重写[]访问者,我会写一个函数来做我想做的事,谢谢!