1

私はJavaScriptを学んでいますが、使用している本の中に、理解できなかった例があります。こんな感じです:

var chineseBox = {};
chineseBox.content = chineseBox;

次に、本は2つの表現とそれらの値をリストします。まず、"content' in chineseBox;それはを返しますtrue。次に、取得しなかっ"content" in chineseBox.contentたものも返されますtrue。2番目の式が、前に定義falseした空のオブジェクトを指していると評価された方が自然だと思います。chineseBoxこのように働く理由はありますか?この機能の実際的な意味は何ですか?そして、どうすればオブジェクトのより深いレベルを探索できますか?正しいchineseBox.content.contentですか?

4

4 に答える 4

3

2番目の式が、前に定義falseした空のオブジェクトを指していると評価された方が自然だと思います。chineseBox

もう空ではありません。の時点でchineseBox.content = chineseBox、プロパティがあります。

オブジェクト参照をモノ(変数、プロパティなど)に割り当てる場合、格納される値はオブジェクトへの参照であり、オブジェクトのコピーではありません。したがって、chineseBox(変数)と(プロパティ)の両方が、と呼ばれるプロパティを持つ同じオブジェクトをchineseBox.content指します。content

これでいくつかのASCIIアートを投げましょう:

var chineseBox = {};

それは私たちに与えます:

+ ----------- +
| ChineseBox(変数)|
+ -----------
| 値|-------->| (オブジェクト)|
+ -----------
                                   | |
                                   + ----------- +

今、私たちはします

chineseBox.content = chineseBox;

...そして私たちは持っています:

                                            / −−−−−−−−−−− \
+ ----------- + | |
| ChineseBox(変数)| v |
+ ----------- + |
| 値|-------->| (オブジェクト)| |
+ ----------- + |
                                   | コンテンツ|-----/
                                   + ----------- +

オブジェクトは1つだけです。それを指す2つの参照があります。

于 2012-06-26T10:42:27.433 に答える
1

chineseBox.contentchineseBox;への参照です。また、これが参照であることが重要です。これは、将来の変更がchineseBox参照に表示されることを意味しchineseBox.contentます。

に設定chineseBox.contentするchineseBoxと、chineseBoxオブジェクトは実際に空になります。ただし、chineseBoxは参照であるため、属性を設定するとすぐcontentに、それを反映するように更新されます。

見るchineseBox.content === chineseBox // true

于 2012-06-26T10:41:28.837 に答える
0

chineseBox.content = chineseBox;chinesesBox.content を指すことを 意味しchineseBoxます。そうchineseBox.content.content.contentです、ルート要素に戻るたびに、などに行くことができます

于 2012-06-26T10:41:56.253 に答える
0

'content' in chineBox.content元のオブジェクト(chineseBox.content-> ChineseBox)を指しているため、true 評価されます。content chineseBox

chineseBox.content.content同じオブジェクトを参照しているため、 chineseBox.content.content....contentはすべて有効です。

于 2012-06-26T10:42:23.347 に答える