0

これを行う方法がないことがわかりました。でも、みんなありがとう! javascript で、角かっこをオーバーライドして文字列内の文字にアクセスできますか?

私はこのようなものを持っています:

function f() {
    var list = [{name: 'test'}, {name: 'test2'}];
}

そして、関数内にあるそのリストからプロパティを取得したいと思います。デフォルトの[]をオーバーライドするメソッドがあると思いますが、何を探すべきか本当にわかりません。

f[0] // {name: 'test'}
f['test2'] // {name: 'test2'}
4

2 に答える 2

1

2 つのいずれかを行わない限り、list変数はプライベートになります。f()

まず、必要なプロパティにアクセスできるように、listから戻ってみることができます。f()

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

2番目に、質問に「oop」のタグを付けたので、このオプションはおそらくあなたが探しているものだと思います。f()コンストラクターを作成できます。

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']orを使用して値にアクセスできない['test2']理由は、それらが値であるためです。通常、値は、キー (この場合は['name']or .name) を使用してオブジェクトでアクセスしたいものです。したがって、次のようなものが必要になる場合があります。

f1.list[0].name // will return 'test'
f1.list[1].name // will return 'test2'

これで混乱が解消されることを願っています。

于 2013-02-17T10:45:23.597 に答える
0

配列の代わりにオブジェクトを使用するだけです:

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];
于 2013-02-17T11:57:35.020 に答える