javascript - 如何为大型项目从基于对象的语言迁移到服务器端 Node.js Javascript?

标签 javascript oop inheritance functional-programming node.js

我已经决定习惯使用 Javascript 作为我的服务器端(我正在使用 Node.js)语言来设置网络服务器、创建服务器守护进程等等。这是一个相当大的项目,这意味着在真正开始避免开销和不必要的麻烦之前,我必须先习惯这门语言并让自己获得最佳设置。

我一直在寻找可以解释大型项目中函数式编程基础知识的资源。不幸的是,大多数消息来源仅谈论用于在浏览器中使用简单技巧的基本 Javascript。

两个有用的链接解释了如何在 Javascript 中创建对象:http://howtonode.org/object-graphshttp://howtonode.org/object-graphs-2 .

最后,创建一个像这样的对象似乎是最明智的:

function MyObject(constructorMemberOne, constructorMemberTwo) {
   this.constructorMemberOne = constructorMemberOne;
   this.constructorMemberTwo = constructorMembertwo;
   this.doSomething = function doSomething() {
       //
   }
}

现在,我正在寻找完整的 Javascript 语言引用资料。到目前为止,https://developer.mozilla.org/en/JavaScript/Reference似乎是最完整的。

Q1:这是推荐的 ECMAScript 语言引用吗?我之所以问,主要是因为它是由一家主要从事浏览器行业的公司提供的,但 Javascript 不仅仅适用于浏览器——也许还有我不知道的来源。

其次,我习惯于为我创建的每个类创建一个新文件,其中文件名代表类的名称。 Q2:在 Javascript(V8,Node.js)中也是推荐的做法吗?如何“导入”此类?

这种“导入”让我对 Node.js 的“要求”感到困惑。我知道这不一样。 Require 基本上加载另一个文件,该文件然后拥有自己的命名空间,这意味着它的变量超出了需要该文件的文件的范围。但是,对于我的类(class),我希望拥有可用于“导入”类(class)的方法(引号,因为我不确定这是否可能)这个类(class)。例如:

var utils = require("utils/MainUtils.js");
utils.doSomething();

据我所知,此 doSomething() 方法仅在如下设置时可用:

function MainUtils() {
   exports.doSomething = function doSomething() {
      //
   }
}

Q3:这样对吗?这看起来是不是很不正常?

问题 4:是否有任何其他博客或资源可以帮助我的设置正常运行,例如 howtonode.org?

最后,问题 5:是否有任何努力使所有这些继承、对象创建、项目结构、命名空间等对于大型项目来说更容易?有没有用于此目的的图书馆或其他东西?

希望我的问题很清楚。任何帮助表示赞赏。谢谢。

最佳答案

is this the recommended ECMAScript language reference?

官方 ECMAScript 语言引用是 ECMA-262本身。但不幸的是,即使按照标准文档的标准,这也是完全不可读的。

ECMA 不制作任何针对终端程序员的资料,也没有任何教程被认为是“最佳”。至少 MDC 链接看起来不错。 (大多数 JavaScript 教程绝对是可怕的并且充满了错误。这在一定程度上是 JavaScript 的错,因为它有这么多……古怪的……特性,但仍然如此。)

In the end, it seems most wise to create an object like:

不幸的是,在 JavaScript 中实现类/实例系统没有被广泛接受的“最佳”方法。很多框架都有自己的系统,或者你可以自己酿造。您的示例代码为每个对象实例创建了每个方法的新实例,与 JS 的 native 原型(prototype)相比,您可能认为这是次优的。 (通常这种方法与闭包中的 var that= this 一起使用,以避免回调代码中的 this 绑定(bind)问题。)您还需要注意如何创建子类并在构造函数中初始化它们。

参见 this question有关 JS 中类/实例方法的讨论。

I'm used to creating a new file for every class I create

是的,这是你不应该带入 JS 的 Java 缺陷。

将源文件保存在相关类和函数的可管理 block 中。有时每个文件一个公共(public)类,更多时候不是。

How would one "import" this class?

JS本身没有原生导入功能。在浏览器中,您可以通过插入 <script> 来完成。标签或 eval ing XMLHttpRequest 获取的代码,并且必须手动将变量保存在单独的命名空间中。在 Node.js 和其他使用 CommonJS 的地方,你使用模块和 require() .

Is that correct?

是的。

Doesn't that seem quite abnormal?

我不这么认为。它与其他脚本语言类似,证明非常有用。只有真正的 Java 会强制您将一个编译单元包装到一个类中。

关于javascript - 如何为大型项目从基于对象的语言迁移到服务器端 Node.js Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008766/

相关文章:

javascript - 在 drop() 中访问加载的表

javascript - 我可以使用什么原生 javascript api 来确定图像是否已完成加载?

javascript - 没有滚动 javascript 导致文本输入不起作用? iPhone 网络应用程序

其他类函数中的Javascript类实例(nodejs)

java - 你在子类中调用 super.finalize() 吗?

javascript - 如何停止在 HTML 中重新加载 jquery

c++ - 使用 boost 指针会改变您的 OO 设计方法吗?

c++ - 在C++中实现多个接口(interface)

c# - 封装 VS 继承——如何使用 protected 函数?

c++ - 用模板方法重写虚方法