Express.js路由器和新对象实例化

在大多数示例中,作者使用带有静态方法的类,并将带有静态方法的类传递给路由器。

router.post('/user/name',(req,res,next) => {

    UserController.getName(req,next);
});

router.post('/user/surname',next) => {

    UserController.getSurname(req,next);
});

我不喜欢使用静态方法的类。并且更喜欢创建实例。

router.post('/user/name',next) => {

     new UserController(req,next).getName();
});

router.post('/user/surname',next).getSurname();
});

让我们想象有1000个对/user/surname的呼叫。因此,据我了解,将创建1000个UserController对象(然后它们将由于不可用而被GC销毁)。那正确吗?如果可以,使用静态方法也许会更好,因为它们是在类加载时创建一次的?

yangzhihonggenen 回答:Express.js路由器和新对象实例化

  

因此,据我了解,将创建1000个UserController对象(然后它们将由于不可用而被GC销毁)。是吗?

是的,这是正确的。

  

如果可以,使用静态方法也许会更好,因为它们是在类加载时创建一次的?

是的。静态方法基本上只是作为对象属性提供给您的函数。没有理由避免它们。您应该将它们视为函数调用,其中函数名称在对象上命名为名称空间。当然,您不希望Javascript避免所有函数调用。而且,这里所需要做的只是一个函数调用。通常,您应该避免创建仅用于一个方法调用然后再进行垃圾回收的对象,因为这是不必要的开销。


仅供参考,如果您真的不想在类上使用静态方法,则只需声明一个普通对象,然后将方法作为该对象的属性即可:

let obj = {
     method1: function() {},method2: function() {}
};

obj.method1();
本文链接:https://www.f2er.com/3131017.html

大家都在问