-1

以下のような名前空間を作成しました。

var Constants = {
    Foo: 'bar',
    SomeVar: {
       key: 'value'
    }
};

私がやりたいことは次のとおりです。

var Constants = {
    Foo: 'bar',
    SomeVar: {
       key: Constants.Foo + 'value' // Notice the Constants.Foo
    }
};

私がやりたいことは、Constants.Fooの値を使用してSomeVarの値を作成できるようにすることです。ただし、これは Firebug でエラーをスローします。

それで、Constants 名前空間内の Foo の値にどのようにアクセスすればよいのでしょうか。また、Javascript でのカプセル化に関するいくつかの記事 (この記事など) を読んでいますが、Constants.Foo を実行しなくても Foo の値にアクセスできますか? おそらく、名前空間のthisキーワードへの参照を保持する何らかの方法があれば、 thisParent.Fooのようなことができます。

ありがとう!


編集:

ところで、これは私が得ているエラーです:

TypeError: 定数が定義されていません

4

2 に答える 2

0

それは可能ではありません。オブジェクトリテラルには、何かに割り当てるまで名前がありません。それでは手遅れです。オブジェクト リテラルも関数ではないため、使用できるコンテキスト キーワードはありません。this含まれている関数にあったものはそのままです。後でプロパティを追加することが唯一の方法です。

var Constants = {
    Foo: 'bar',
    SomeVar: {}
};

Constants.SomeVar.key = Constants.Foo + 'value';

いいえ、名前空間は JavaScript のものではありません。それはオブジェクトです。これ以上何もない。

于 2012-12-24T00:16:31.660 に答える
0

問題はConstants、オブジェクトが構築された後、割り当てが実行されるまで存在しないことです。次のようなことができます ( IIFE ):

var Constants = (function() {
    self = { Foo : 'bar' };
    self.SomeVar = self.Foo + 'value';
    return self;
}());
于 2012-12-24T00:21:29.177 に答える