node.js中面向对象的开发

时间:2015-03-08 14:00:50

标签: javascript node.js

使用nodejs创建了api服务器。作为前端发展的习惯,在面向对象的结构中发展它们,但在写作的过程中我感到困惑。

var server = {
component: {
    http: require("http"),
    fs: require("fs")
},
start: function () {
    var instance=this;
    this.component.http.createServer(function (request, response) {
        instance.component.fs.readFile(filename, "binary", function (err, file) {
            // do something with file
        });
    }).listen(80);
}

这是我在参数函数中调用继承对象的方法。在这种情况下,单个文件系统对象与所有连接共享,还是我需要为每个新连接创建一个新的文件系统实例?

编辑:"实例"不是标签声明。

1 个答案:

答案 0 :(得分:0)

在您的示例中,将为每个连接重用文件系统对象。

关于编码风格的建议:我很确定你不需要'实例'标签声明 - 实际上我强烈建议你不要在js中使用它!带标签的语句通常与break或continue语句一起使用&事实上,在我的整个职业生涯中,他们只使用过几次。他们弄乱了代码和可能会混淆正在阅读您的代码的人。您可以阅读有关标签声明in MDN JavaScript manual的更多信息。

作为标签的替代品,请使用例如变量。此外,如果你开始将'this'分配给例如变量(或示例中的标签)试图坚持这个&马上开始参考这个变量 - 尽量不要混淆'this'&包含它的变量(如代码的第8行)。您的代码可能如下所示:

var server = {
component: {
    http: require("http"),
    fs: require("fs")
},
start: function () {
    var instance = this;
    instance.component.http.createServer(function (request, response) {
        instance.component.fs.readFile(filename, "binary", function (err, file) {
            // do something with file
        });
    }).listen(80);
}

对象范围将在此处隔离'实例'和&允许它在'instance.component.http.createServer'回调中更深入。

希望这个答案&建议将帮助你和...其他JavaScript开发人员!