如何从基于对象的语言转移到服务器端Node.js的JavaScript来大项目?
-
25-09-2019 - |
题
我已经决定要习惯使用JavaScript作为我的服务器双面(我使用Node.js的)语言设置Web服务器,创建服务器守护程序和更多。这是一个相当大的项目,我必须习惯的语言和实际出发,以避免开销和不必要的麻烦,之前让自己的最佳安装该装置。
我一直在寻找一种最好解释大项目函数式编程的基础知识来源。不幸的是,大多数来源只讲基本的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 似乎是最完整的。
Q 1:这是推荐的ECMAScript语言参考?我问,主要是因为它是由多数民众赞成大多是在浏览器行业工作公司采购,但JavaScript是不只是那里的浏览器 - 也许有来源,我不知道的。
其次,我已经习惯了创造每一个类创建该文件名代表的类名称的新文件。 Q2:在JavaScript中(V8,Node.js的)也推荐这种做法?如何将一个“进口”这个类?
这“进口”使我对我confusingness有关的Node.js的“规定”。我知道这是不一样的。基本上需要加载其他文件,然后有它自己的命名空间,这意味着它的变量是真实requireing该文件的文件的范围了。对于我的课不过,我想有可用的类方法是“进口”(引号,因为我不知道这是否甚至有可能)这个类。例如:
var utils = require("utils/MainUtils.js");
utils.doSomething();
据我所知,这doSomething的()方法,如果它被设置像仅适用:
function MainUtils() {
exports.doSomething = function doSomething() {
//
}
}
Q3:这是否正确?那岂不是显得相当异常?
Q4:是否有在得到我的设置工作,像howtonode.org
有帮助的任何其他博客或资源?最后,Q5:有没有过任何努力到做这一切的继承,创建对象,项目结构,命名空间等更容易为大项目?任何库或东西用于此目的?
希望我的问题是清楚的。任何帮助表示赞赏。感谢。
解决方案
这是推荐的ECMAScript语言参考?
好官方ECMAScript语言参考是 ECMA-262 的本身。但不幸的是,这是完全不可读即使是标准文档的标准。
ECMA不产生针对最终程序员的任何材料,而且也被认为是“最好的”没有一个教程。该MDC链接看起来体面,至少。 (大多数JavaScript教程是绝对可怕的,充满了错误的。这部分是JavaScript的过错有这么多... ...古怪的特点,但仍。)
在最后,它似乎是最明智的做法是创建一个对象,如:
不幸的是没有被广泛接受-'best”的方式来实现在JavaScript中类/实例系统。很多框架都有自己的系统,或者您也可以酿造自己。你的示例代码会为每个对象实例,你可能会考虑不理想相比,JS的原生原型每种方法的新实例。 (正常情况下使用这种方式用在封闭,以避免var that= this
结合的问题在回调代码this
。)你还需要锻炼护理中如何创建子类并初始化它们的构造。
请参阅这个问题以上的讨论接近类/实例在JS。
我已经习惯了创造每一个类创建一个新的文件
是啊,这是一个Java疣,你不应该带来JS。
请你的源文件中的相关类和函数的可管理的块。有时,这将是每个文件包含一个公共类,往往也不会是。
如何将一个 “进口” 这个类?
JS本身没有本机导入功能。在浏览器中,你通过插入<script>
标签或eval
ING代码获取由XMLHttpRequest
做,必须采取人工饲养不同的命名空间的变量的照顾。在Node.js和受在您使用CommonJS的工作其他地方,您使用的模块和require()
。
是正确的吗?
是
那岂不是显得相当异常?
我不这么认为。它类似于其他脚本语言,它被证明是非常有用的。这是唯一真正的Java,迫使你编译单元包成一个类。
其他提示
我读了一本书叫专业的Javascript设计模式后,提出了以下几点。不过,我已经告诉它这样想在Javascript(公营,私营,静等)并不好:
var SomeClass = (function() {
this.prototype.publicStaticMember = "this is a public static variable",
this.prototype.publicStaticMethod = function() {
return "this is a public method: cannot access private members/methods, but can access privileged and public members/methods";
}
var privateStaticMember = "this is a private static variable";
function privateStaticMethod() {
return "this is a private static method: can only access private members/methods";
}
//instance part
return function() {
this.publicInstanceMember = "this is a public instance variable";
var privateInstanceMember = "this is a private instance variable";
this.publicInstanceMethod = function() {
return "this is a privileged method: can access both public and private members/methods";
}
var privateInstanceMethod = function() {
return "this is a private method: can access both public and private members/methods but is private";
}
}
})();
它会被实例是这样的:
var someInstance = new SomeClass().("param1", "param2");
任何意见?我应该阅读其他的书?
如果您还没有准备好,结账由Douglas Crockford的视频。他有一堆的影片,讲的JavaScript原型方面。
谷歌为“道格拉斯Crockford的Java编程语言的视频”。下面是该系列的第一部分的链接: http://video.yahoo.com/watch /一百七十一万○五百○七分之一十一万一千五百九十三
在的defineClass NPM包提供简单而强大的OOP为JavaScript与性状(混入)的支持和嵌套类。下面是使用的一个示例:
var defineClass = require("defineClass").defineClass;
var Person = defineClass({
cash: 0,
constructor: function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
},
greet: function (name) {
console.log("Hello " + name + ". My name is " + this.firstName);
},
earn: function (amount) {
this.cash += amount;
}
});
var Developer = defineClass({
_super: Person,
// override a field default value
cash: 100,
// override the constructor
constructor: function (firstName, lastName, language) {
// you may have code before the base constructor call
// call the base constructor
this._super(firstName, lastName);
this.language = language;
}
// override a method
greet: function (name) {
console.log("Hey, " + name + ". I'm " + this.firstName)
},
// override a method and call its base method
earn: function (amount) {
return this._super(amount * 1.2);
}
});
了解更多自述: https://github.com/nodirt/defineClass
安装:
$ npm install defineClass