1

Javascript で既存のオブジェクトを取得し、それをモジュールとして書き直そうとしています。以下は、モジュールとして書き直そうとしているコードです。

var Queue = {};
Queue.prototype = {
    add: function(x) {
        this.data.push(x);
    },
    remove: function() {
        return this.data.shift();
    }
};
Queue.create = function() {
    var q = Object.create(Queue.prototype);
    q.data = [];
    return q;
};         

モジュールを作成する私の試みは次のとおりです。

var Queue = (function() {

    var Queue = function() {};

    // prototype
    Queue.prototype = {
        add: function(x) {
            this.data.push(x);
        },
        remove: function() {
            return this.data.shift();
        }
    };

    Queue.create = function() {
        var q = Object.create(Queue.prototype);
        q.data = [];
        return q;
    };


    return Queue;
})();

これは正しいですか?もしそうなら、jsコードの他の関数や領域でそれを呼び出すにはどうすればよいですか。すべての助けに感謝します!

4

2 に答える 2

1

空のコンストラクター関数を持ち、そのコンストラクター関数のプロパティを事実上コンストラクターとして使用するのは少し無意味に思えます。

コンストラクターを利用してみませんか...

var Queue = (function() {

    var Queue = function() {
        if (!(this instanceof Queue))
            return new Queue();

        this.data = [];
    };

    Queue.prototype = {
        add: function(x) {
            this.data.push(x);
        },
        remove: function() {
            return this.data.shift();
        }
    };

    return Queue;
})();

または、 を使用する場合Object.createは、代わりに次のようにします。

var Queue = (function() {

    var Queue = function() {
        var o = Object.create(proto);

        o.data = [];

        return o;
    };

    var proto = {
        add: function(x) {
            this.data.push(x);
        },
        remove: function() {
            return this.data.shift();
        }
    };

    return Queue;
})();

どちらの場合も、 を使用Queueして新しいオブジェクトを作成するだけです。

var q = Queue();

技術的には、最初のものは を使用する必要new Queue()がありますが、省略instanceofできるテストがあります。new

于 2012-12-09T22:40:08.240 に答える
0

コードをモジュール化しようとしている場合は、ConversationJSを試してください。これにより、従来の関数呼び出しを回避することで、コードベースを極端に分離しておくことができます: https ://github.com/rhyneandrew/Conversation.JS

于 2012-12-09T23:12:40.883 に答える