哪条路正确?Javascript对象(nodejs)

哪条路正确?Javascript对象(nodejs),javascript,node.js,javascript-objects,ecmascript-5,Javascript,Node.js,Javascript Objects,Ecmascript 5,我喜欢javascript和Node,但当我声明对象时。。我不知道什么是最佳实践和高性能。我对高性能感兴趣 "use strict"; module.exports = SignUpBusiness; SignUpBusiness.__proto__ = new SignUpBusiness; function SignUpBusiness(){ this._certificate = null; this._db = require('mong

我喜欢javascript和Node,但当我声明对象时。。我不知道什么是最佳实践和高性能。我对高性能感兴趣

"use strict";

module.exports = SignUpBusiness;
SignUpBusiness.__proto__ = new SignUpBusiness;


function SignUpBusiness(){

    this._certificate   = null;
    this._db            = require('mongoose');
    this._model         = require('../models/User.js');
    this._userModel     = this._db.model('User', this._model.UserSchema);
    this._result        = false;

    this.runLoginProcess = function(credentials , next){
         //code
    }

    // etc.

}
或者这样:

"use strict";
module.exports = {

    _certificate   : null,
    _db            : require('mongoose'),
    _model         : require('../models/User.js'),
    _userModel     : this._db.model('User', this._model.UserSchema),
    _result        : false,


    runLoginProcess: function(credentials , next){
          //code
    }
    // etc.
}
非常感谢! 和对不起,我的英语不好。

使用原型(首选)是最好的方法。原型是最佳实践,可以减少内存消耗(否则您将在每个新对象上重新声明内存)

根据路易斯的说法,上述说法可能不准确:

如果模块的导出被分配给foo,那么foo.protoproto已定义,但foo.protoproto未定义。第二个选项的深度为1:foo。proto已定义,但没有任何深度。第一种情况不仅占用更多内存,而且速度也较慢,因为字段查找将必须遍历更深的链


我现在无法测试我自己的答案。我稍后会尝试。

我更喜欢第一个,这样更容易获得正确的范围。您将创建此对象一次还是多次?仅创建一次并导出到NodeJS中的module.exports。控制器调用业务层(这段代码)来执行一个复杂的过程。Sergio给出了迄今为止最好的答案:“这取决于情况。”然而,(Sergio无意冒犯)这不仅仅是他写的。因此,没有一种方法是正确的,而另一种方法是错误的。我使用了这两种方法,具体取决于上下文。(我说两者都不正确,但问题中当前出现的两个示例都包含有问题的或完全错误的代码。例如,
this.\u db.model('User',this.\u model.UserSchema)
在第二个示例中没有做任何明智的事情。)答案“视情况而定”并不好,总有更好的方法。也许问题在于我对代码的操作没有给出多少细节。对不起。我喜欢这两种方式,但我希望在不牺牲漂亮且可理解的代码的情况下获得最佳性能。为什么代码行有问题@这要看情况而定。使用这两种方法都是有原因的,特别是如果您的对象将是一个单例,那么内存问题就不相关了。这就是说,如果你不能立即直观地选择你应该做的选择,那么使用原型方法,它更灵活,它会教你如何以及何时做出选择。第一个选择的定义方式有3个对象的深度。也就是说,如果模块的导出被分配给
foo
,那么
foo.\uuuuu-proto.\uuuu-proto.\uuuuu-proto.\uuuuuu-proto.\uuuuu-proto.\uuuuu-proto.\uuuu-proto.\uuu-proto.\uuuu-proto.\uu-code>被定义,但是
foo.\uuuuuu-proto.\uu-proto.\uuu-proto.\uu-code>未被定义。第二个选项的深度为1:
foo。定义了\uuuu proto\uuuuu
,但没有任何深度。第一种情况不仅占用更多内存,而且速度也较慢,因为字段查找将必须遍历更深的链。(即使是名字点击也会慢一些,但是解释太长了,不适合这个注释。)如何分配三个对象的深度?JavaScript VM就是这样构造的。在Node.js中尝试一下。我可以在午餐后测试它。在那之前,我会把它记在我的答案里。如果你想详细解释为什么名字点击和字段查找会变慢,请随时发布答案。