0

特定の「名前空間」にさまざまなオブジェクトを格納する方法を理解しようとしています。

私はこのようなものを持っています:

app.js

// This is the startup script:
var MyApp = {}
MyApp.ui = {}
MyApp.ui = require('ui/MainWindow');
MyApp.ui = require('ui/SecondWindow');

// Doesn't exist anymore because the 2nd require overwrites the
// first include
MyApp.ui.MainWindow.test;

次に、ともありますMainWindow.jsSecondWindow.jsこれは次のようになります。

var MainWindow = {
    test: "Main"
}

exports.MainWindow = MainWindow;

var SecondWindow = {
    test: "Second"
}

exports.SecondWindow = SecondWindow;

exports.XXXWindow = XXXWindow基本的に、そのオブジェクトを使用可能にします。

だから私の中で私はオブジェクトapp.jsをに保存しようとします。だから私はそれをこのように呼ぶことができます:MainWindowMyApp.ui

MyApp.ui.MainWindow.test

SecondWindow次に、それにオブジェクトを追加したいと思います。だから私はそれを同じように呼ぶことができます:

MyApp.ui.SecondWindow.test

しかし、私が今それを持っている方法は、2番目が最初のものを上書きすることを要求します。したがって、現在はを指しているだけSecondWindowです。両方のオブジェクトをから呼び出すことができるようにするには、何をする必要がありますMyApp.uiか?

4

2 に答える 2

1

実行することをお勧めします(コードが構文的に正しくない場合は申し訳ありませんが、私はcoffeescriptを使用しており、Javascriptにはもう慣れていません):

MainWindow.js

var MainWindow = function() {
    return {test: 'Main'};
};
module.exports = MainWindow;

SecondWindow.js

var SecondWindow = function() {
    return {test: 'Second'};
};
module.exports = SecondWindow;

app.js

var myApp = {
    ui: {
        MainWindow: require('MainWindow.js'),
        SecondWindow: require(SecondWindow.js)
    }
};

今私の個人的な意見。私はしたい:

app.js

var MainWindow = require('MainWindow'),
    SecondWindow = require('SecondWindow'),
    myApp = {
        ui: {
            MainWindow: new MainWindow(),
            SecondWindow: new SecondWindow()
        }
    };
于 2012-07-31T14:58:58.317 に答える
0

の2番目の割り当てはMyApp.ui、古い値を上書きします。ただし、次のことを行うことができます。

function inject(obj_into,obj_from){
    for(var x in obj_from)
        obj_into[x] = obj_from[x];
}

MyApp.ui = {MainWindow:{},SecondWindow:{}};
inject(MyApp.ui.MainWindow,require('ui/MainWindow'));
inject(MyApp.ui.SecondWindow,require('ui/SecondWindow'));

最初MyApp.uiに空のプロパティオブジェクトMainWindowで初期化し、SecondWindowそれらに。を入力しinjectます。

于 2012-07-31T14:24:21.487 に答える