1

現在の値の親から値にアクセスしようとしていますが、成功しません。私の問題を示すために、次の2つのサンプルJavaScriptコードがあります。


1)

var x = {
    y : {
        a : "a",
        ab : this.a + "b"
    }
};

console.log(xy);

> Object {
    a : a,
    ab : undefinedb
}

2)

var x = {
    y : {
        a : "a",
        ab : x.y.a + "b"
    }
};

console.log(x.y); // Uncaught TypeError: Cannot read property 'y' of undefined 
4

2 に答える 2

2

リテラルを使用する場合、それらの変数を定義するステートメントが実行されるまで実行できません。

1つの良い方法は次のとおりです。

var x = {};

x.a = 'hey';

x.b = x.a + ' how you doing?';

alert(x.b);

またはよりコンパクトに:

var x = {
    a: 'hey'
};

x.b = x.a + ' how you doing?';

alert(x.b);
于 2013-03-08T22:36:36.240 に答える
1

x.ythisは、その時点では未定義undefinedです。つまり、匿名オブジェクトを作成すると、それは閉じるまで実際には存在しません}

だからあなたが望むものを達成するための別の方法は次のようになります:

var x = {
     y : {a : "a"}
}

x.y.ab = x.y.a + "b"

このようにして、ab変数は後に設定されxy両方が初期化されたため、x.y.a現在設定されています。

初期化中に本当にxyabを設定したい場合は、関数とクロージャを使用してより正式に設定する必要があります。次のようなもの。

var x = function(){
  this.a = 'foo';
  this.b = this.a + ' bar';
}() // Immediate function call so I don't have to create it.

console.log(x.b); // logs 'foo bar'
于 2013-03-08T22:38:02.373 に答える