Javascript 拆分js代码(以Ruby风格)

Javascript 拆分js代码(以Ruby风格),javascript,module,Javascript,Module,因为我喜欢在RubyonRails中使用模块和类来拆分代码是多么容易,所以我想知道,拆分js代码有什么错/好,比如: var MyApp = {}; MyApp.db = {}; MyApp.settings = {}; // settings.js // ------------- MyApp.settings.get = function () { // do some stuff }; MyApp.setti

因为我喜欢在RubyonRails中使用模块和类来拆分代码是多么容易,所以我想知道,拆分js代码有什么错/好,比如:

    var MyApp = {};
    MyApp.db = {};
    MyApp.settings = {};

    // settings.js
    // -------------
    MyApp.settings.get = function () {
        // do some stuff
    };
    MyApp.settings.set = function () {
        // do some stuff
    };
    // -------------

    // db.js
    // -------------
    MyApp.db.init = function () {
        // do some stuff
    };
    // -------------

    $(function () {
        MyApp.db.init();
        MyApp.settings.get();
        MyApp.settings.set();
    });
我读过关于使用prototype的文章,但感觉不像第一个例子那么清楚

var MyApp = (function (my_app) {

    my_app.init = function () {
        // stuff
    };

    return my_app;
}());

MyApp.prototype.settings = (function (my_app) {

    my_app.get = function () {
        // stuff
    };

    my_app.set = function () {
        // stuff
    };

    return my_app;
});

MyApp.init();
MyApp.settings.get();
MyApp.settings.set();
第一个例子在chrome浏览器上运行得很好,但在其他浏览器上还没有测试过,而且在我看来比prototype和其他iv'e浏览器更干净。。我找不到任何类似于我的例子的信息,这让我想,为什么人们不使用这个

我也意识到,我的例子并不是常规的做事方式,但除此之外,还有什么原因,为什么我不应该使用第一个例子

编辑:我喜欢我的示例的主要原因是,我不想将MyApp初始化为新对象,我想将其拆分为多个文件


EDIT2:我的主要问题是,有什么理由不使用第一个示例,除了它不是“约定”之外?

在这种情况下,第二个示例没有任何好处。如果您想要声明一些函数或变量,这些函数或变量既不应该在全局范围内公开,也不应该作为MyApp的公共方法公开,那么它将非常有用。使用原型也没有任何好处,因为您可能只有一个MyApp实例—您将其用作名称空间,而不是要使用new关键字实例化的对象

例如:

MyApp = (function () {
    var my_app = {};

    // calculateSomeStuff  and number are "private" to the methods declared here.
    // you can't call calculateSomeStuff() or change number from outside, 
    // and it's not exposed as MyApp.calculateSomeStuff() or MyApp.number
    var number = 4;
    var calculateSomeStuff = function(){
        var result = /* do some calculations */
        return result * number;
    }
    my_app.get = function () {
        var data = calculateSomeStuff();
        return data + number/2;
    };

    return my_app;
}());

我的主要问题是,除了不是“惯例”之外,还有什么理由不使用第一个例子?