2

これは初心者の質問かもしれません。私は何年も JavaScript を使用してきましたが、「真剣に」取り組み始めたばかりです。「これ」について質問があります

var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

console.log('defaults',defaults);

defaults.baseName が「未定義」である理由がわからない それは可能ですか、それとも「item_」を 2 回入力する必要がありますか?

4

4 に答える 4

3

簡単な答えは、やろうとしていることができないということです。オブジェクトリテラルの解析/解釈/評価中(ただし、考えたいと思います)、オブジェクトリテラルは存在しないため、そのような方法で参照することはできません。

于 2011-04-10T20:40:52.557 に答える
2

JavaScriptオブジェクトリテラルは糖衣構文であるため、機能しません。

this; // at point A
var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

に変換されます

this; // point A
var defaults = new Object();
defaults.baseId = 'item_';
defaults.baseName = this.baseId; // "this" here is same as "this" at point A

ゲッターとセッターを使用できます。

{
   baseId: 'item_',
   get baseName() { return this.baseId; },
   set baseName(x) { this.baseId = x }
}
于 2011-04-10T21:02:48.027 に答える
2

あなたはこれを行うことができます:

var defaults = {};
defaults.baseId = defaults.baseName = 'item_';
于 2011-04-10T20:41:11.400 に答える
1

代わりに使用して、次functionのものと同等のものを作成できclassます。

function defaults() {
   this.baseId = 'item_';
   this.baseName = this.baseId;
}

thisこれで適切なコンテキストが得られます。

元のコードを使用する別のオプションはbaseName、関数を作成することです。

var defaults = {
    baseId : 'item_',
    baseName : function() { return  this.baseId; }
};

修正してくれたŠime Vidasに感謝します!

于 2011-04-10T20:38:01.370 に答える