我已经决定要习惯使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top