0

私はちょうど楽しみのためにsom javascript OOPで遊んでいましたが、エラーが発生しました...

クラス ia クラスを作成しようとしていますが、それが可能かどうかわかりません..

誰でも私を正しい道に導くことができますか...

ここで私の問題を参照してください: http://jsfiddle.net/wBZ4r/2/

function MyClass() {
    var server;

this.__init__ = function() {
    this.server = new this.Server();
    console.log(this.server.url);
}();

/* -------- Server Class ------------------ */
this.Server = function() {
    var url;
    this.__init__ = function() {
        this.url = "server/test.json";
    }();

    this.connect = function() {
        console.log(this.url);
    };
};
}(window.myclass = new MyClass());

次のエラーが発生しました:「this.Server はコンストラクターではありません」

それが理にかなっていることを願っています!

4

3 に答える 3

1

問題は、thisキーワードを適切に使用していないことです。Javascript Gardenを読むことをお勧めします。JSについて多くのことを学ぶのはとても良いことです。

function MyClass() {
    var self = this;
    /* -------- Server Class ------------------ */
    function Server() {
        var selfServer = this;
        this.__init__ = function () {
            selfServer.url = "server/test.json";
        }();

        this.connect = function () {
            console.log(selfServer.url);
        };
    };
    this.__init__ = function () {
        self.server = new Server();
        console.log(self.server.url);
    }();
    this.Server = Server;
}(window.myclass = new MyClass());

JSFiddle

于 2013-06-13T20:43:10.743 に答える
1

主な問題は、最初のクロージャーから関数を返していないことです。しかし、それはさておき、ここでやろうとしていることには多くの問題があります。のより伝統的なスタイルの例を次に示しClassます。Serverこの例では、最初のクラスで 2 番目の ( ) クラスをインスタンス化します。

http://jsfiddle.net/wBZ4r/5/

/**
closure to prevent others from accessing
*/
(function() {
/** 
Server class
*/
function Server() {
    this.url = "/some/url";
}

/**
Server prototype, defines connect function
*/
Server.prototype = {
    connect: function() {
        console.log(this.url);
    }
}

/**
MyClass
*/
function MyClass() {
    /**
    MyClass instansiates a new Server
    */
    this.server = new Server();
};

var thing = new MyClass();
thing.server.connect();
})();
于 2013-06-13T20:39:09.703 に答える