1

オブジェクトがあり、プロパティの1つは配列です。その配列に新しいプロパティを設定したい(customProp = 0)。ただし、 myObjectの宣言内でこれを実行したいと思います。

myObject = {
  someString: "text",
  someArray: ["one","two"],
    /* What I've Tried */
    someArray: { customProp: 0 } // Overwrites my array with a new object
    someArray["customProp"]: 0 // Invalid syntax
    someArray: customProp: 0 // Also invalid
}

配列を作成してからプロパティを設定できない場合は、一挙に作成できますか(ここでも、このオブジェクトの範囲内にとどまります)?



別の(小さな)質問があります。宣言内にあるプロパティの1つを参照するにはどうすればよいですか。otherProp = someStringを設定したいのですが、どうすればよいですか?

myObject = {
  someString: "text",
  otherString: someString, // someString is undefined
  otherString: myObject["someString"], // myObject is undefined
  otherString: this["someString"] // Just... undefined
}

これを別の質問に分割する必要があるかもしれませんが、最初に答えた人が2番目の質問の答えを知っていることを願っています。

4

3 に答える 3

3

残念ながら、どちらのリクエストもできません。JavaScriptのオブジェクトリテラルは便利ですが、欠点があります。ほとんどの場合、あなたが発見したものです。

オブジェクトリテラル内にいる場合、そのオブジェクトはまだ完全には存在していません。JavaScriptインタープリターはそれの取り込みを完了していません。したがって、リテラル内では、リテラルthisのすぐ外側のオブジェクトを指し、リテラルはそれ自体の他の部分を参照する方法がありません。

幸いなことに、リテラル宣言の後で実行するだけで、必要な両方を実行できます。

myObject = {
    someString: 'text',
    someArray: ['one', 'two']
};

myObject.someArray.customProp = 0;
myObject.otherString = myObject.someString;

または、必要に応じて、これらすべてをコンストラクター関数内にラップし、。を使用してオブジェクトを作成できますnew

function MyObject() {
    this.someArray = ['one', 'two'];
    this.someArray.otherProp = 0;
    this.otherString = this.someString = 'text';
}

var myObject = new MyObject();
于 2011-11-11T15:06:54.770 に答える
1

ええと、配列は数値ベースなので、

someArray["customProp"]: 0

動作しません。文字列ベースのキーが機能するには、Javascriptオブジェクト{}である必要があります。そして、あなたはただ言うことができます

someArray: {0:"one",1:"two","customProp":0},

2番目の質問:それは不可能だと思います。オブジェクトはまだ初期化されていないため、まだ読み取ることができません...

于 2011-11-11T15:06:16.223 に答える
0

配列にプロパティを設定できますが、ネイティブ関数を使用してプロパティが繰り返されることはありません。選択肢は、オブジェクト(提案されているとおり)またはメンバーの1つとしてオブジェクトを含む配列です。

["one", "two", {customProp: 0}]
于 2011-11-11T15:52:59.800 に答える