我已经决定习惯使用 Javascript 作为我的服务器端(我正在使用 Node.js)语言来设置网络服务器、创建服务器守护进程等等。这是一个相当大的项目,这意味着在真正开始避免开销和不必要的麻烦之前,我必须先习惯这门语言并让自己获得最佳设置。
我一直在寻找可以解释大型项目中函数式编程基础知识的资源。不幸的是,大多数消息来源仅谈论用于在浏览器中使用简单技巧的基本 Javascript。
两个有用的链接解释了如何在 Javascript 中创建对象:http://howtonode.org/object-graphs和 http://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/