0

私は、残りの部分で使用される定数や列挙型などを格納するルートオブジェクトリテラルと、さまざまな機能を分離するためのネストされたオブジェクトリテラルがあるプロジェクトに取り組んでいます。このようなもの:

root = {
    enum : {
        FIRSTVAL : 0,
        SECONDVAL : 1,
        THIRDVAL : 2,
    },
    CONST : 0xFFE8,
}

root.display = {
    renderer : function() {
        // do something...
        do_some_fun(enum.FIRSTVAL);
    }
    // other functions
}

root.engine = {
    processor = function() {
        // do some stuff
        run_calculations(CONST);
    }
    // some other functions
}

基本的に、トップレベルのオブジェクト リテラルを名前空間として使用し、他のオブジェクト/関数は複数のファイルに分散しています。唯一の問題は、root.display.renderer の enum や root.engine.processor の CONST など、ルート オブジェクトのプロパティにルートの子がアクセスできないことです。ルートが関数オブジェクトである場合、これはプロトタイプ チェーンを介して簡単に実現できますが、ルート オブジェクトを静的にして、単にコンテナーとして機能させたいと考えています。

Javascript でこの構造を実現する最善の方法は何ですか? プロジェクトのカプセル化という同じ目標を達成するために使用できるより良い構造はありますか?

編集:申し訳ありませんが、継承について適切に言及していませんでした。root のプロパティには (root.whatever 経由で) 直接アクセスできることを知っています。ルートへのその参照をルートの子の中で暗黙的にすることが可能かどうかを知りたいです。直接参照の使用がJavascriptの標準的な方法でない限り?

4

1 に答える 1

3

こんな感じですか??(「var」は必要ありませんが、推奨されます。)

var root = {
    enum : {
    FIRSTVAL : 0,
    SECONDVAL : 1,
    THIRDVAL : 2,
    },
    CONST : 0xFFE8,
}

root.display = {
    renderer : function() {
        console.log(root.enum.FIRSTVAL);
    }
}

root.engine = {
    processor : function() {
        console.log(root.CONST);
    }
}
于 2013-11-15T05:39:40.127 に答える