Javascript OOP,类中的类,出现错误“;不是构造函数";,为什么?

Javascript OOP,类中的类,出现错误“;不是构造函数";,为什么?,javascript,oop,Javascript,Oop,我只是玩som javascript OOP,只是为了好玩,但我得到一个错误 我正在尝试创建一个类,但不知道它是否可行 谁能帮我找到正确的路 在这里查看我的问题: 出现此错误:“this.Server不是构造函数” 希望它有意义 调用此.server时未定义它。因此,它被解读为未定义且失败 将代码更改为该值可使其成功创建对象: this.__init__ = function() { this.server = new this.Server(); consol

我只是玩som javascript OOP,只是为了好玩,但我得到一个错误

我正在尝试创建一个类,但不知道它是否可行

谁能帮我找到正确的路

在这里查看我的问题:

出现此错误:“this.Server不是构造函数”


希望它有意义

调用此.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";
}();

工作小提琴:

调用此服务器时未定义它。因此,它被解读为未定义且失败

将代码更改为该值可使其成功创建对象:

 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";
}();

工作小提琴:

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


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


您的问题是您没有正确使用
这个
关键字。我建议你阅读,了解很多关于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());

您的问题是您没有正确使用
这个
关键字。我建议你阅读,了解很多关于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());


您正在使用哪些javascript库?本例中没有,。但是jQuery通常。。为什么?为什么要在函数调用中执行赋值?在定义此服务器之前,您正在调用它;我搞不懂你想做什么。你在使用哪些javascript库?本例中没有,。但是jQuery通常。。为什么?为什么要在函数调用中执行赋值?在定义此服务器之前,您正在调用它;我不知道你想做什么。我不确定OP想做什么,但我认为问题是是否可以创建嵌套类。当然,在这个示例中,MyClass在其内部实例化了一个服务器。在另一个类中声明一个类有什么意义?谢谢你的示例,我只是在测试和尝试思考。。。我不知道在课堂上上课是不是一个愚蠢的想法!我刚想到一个主意;)@Morganarallen这可能不是一个好主意,但一个原因可能是它使类对外部类的作用域保持私有。如果是这种情况,请在公共私有作用域中声明类,而不是在类本身中。我不确定OP想要做什么,但我认为问题是是否可以创建嵌套类。当然,在这个示例中,MyClass在其内部实例化了一个服务器。在另一个类中声明一个类有什么意义?谢谢你的示例,我只是在测试和尝试思考。。。我不知道在课堂上上课是不是一个愚蠢的想法!我刚想到一个主意;)@Morganarallen这可能不是一个好主意,但一个原因可能是它使类对外部类的作用域保持私有。如果是这种情况,请在公共私有作用域中声明类,而不是在类本身中。它只是杂乱无章,令人困惑。为scope引用
this
是可行的,但它仍然会将
\uuuu init\uuuu
保留为空。除非是出于这个目的,否则最好先定义这个方法,然后调用它。@numbers1311407是的,我不知道他想用它做什么。其他一些海报有一些很好的例子,说明如何更好地做一些他可能想做或不想做的事情。我不确定他想要什么,所以我只是修复了明显的错误,以表明在另一个OneReference
this
for scope works中声明一个类没有根本问题,但它仍然将
\uUu init\uUu
保留为null。除非是出于这个目的,否则最好先定义这个方法,然后调用它。@numbers1311407是的,我不知道他想用它做什么。其他一些海报有一些很好的例子,说明如何更好地做一些他可能想做或不想做的事情。我不确定他想要什么,所以我只是修正了明显的错误,以表明在另一个类中声明一个类并没有根本性的问题