5

私は最近JavaScriptをたくさん使っており、いくつかの大きな関数コレクションを作成しました。メインライブラリから分離したいサブ機能が必要であることに気づきましたが、それでもメインライブラリに含まれていますが、これを行うためのエレガントな方法はまだ見つかりませんでした。

これが私が現在使用しているいくつかの例です

だから私は通常このようにメインライブラリをセットアップします

// Main library
var animals = function(settings){
    // Main library stuff
}

個別にカプセル化されているが、メインライブラリの一部であるサブクラス/サブ機能を追加するには...

これは、オブジェクトリテラル表記を使用する最初のメソッドです。

animals.prototype.dogs = {
    addDog: function(){
        // Can only access the dogs object
        var test = this;
    },
    removeDog: function(){}
}

// Usage of the whole thing
var animalsInstance = new animals({a: 1, b: 3});
animalsInstance.dogs.addDog();

私はこの構文が本当に好きですが、dogsオブジェクト内の関数内のanimalsインスタンスを参照する方法がないため、実際に使用することはできません。だから私は代わりにこの表記法を思いついた

animals.prototype.dogs = function(){
    var parent = this;
    return {
        addDog: function(){
            // The animals instance
            var test = parent;
            // The dogs instance
            var test2 = this;
        },
        removeDog: function(){}
    }
}

// Usage
var animalsInstance = new animals({a: 1, b: 3});
animalsInstance.dogs().addDog();

今では、犬の機能のすべてのサブ機能の中から動物のインスタンスにアクセスできますが、少しハッキーな方法はあまり好きではありません。誰かがもっときれいな方法を持っていますか?

4

1 に答える 1

4

おそらくあなたはこのようなものを探しています...

これにより、次の構文を使用できるようになりますtinyFramework.Utilities.Storage.setItem()tinyFramework.Elements.Modals.createModal()

var tinyFramework = {

    Utilities: {
        Storage: {
            setItem: function(){
            //do stuff
            },

            getItem: function(){
            //do stuff
            }
        },
        Helpers: {

        }
    },

    Elements: {

        Modals: {

            createModal: function(){
            },
            closeModal: function(){
            }
        }
    }
}
于 2012-09-07T19:44:03.800 に答える