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.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);
        };
    };
    this.__init__();

您还遇到了一个问题,您在没有将其绑定到第二个 init 函数中的正确范围的情况下分配给它。可以这样修复:

var url,self = this;
this.__init__ = function() {
self.url = "server/test.json";
}();

工作小提琴:http: //jsfiddle.net/wBZ4r/4/

于 2013-06-13T20:34:18.170 回答
1

主要问题是您没有从第一个闭包中返回函数。但除此之外,您在这里尝试做的事情有很多问题。这是一个更传统的风格的例子Class。在示例中,我在第一个中实例化了第二个 ( Server) 类。

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 回答
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 回答