在大多数示例中,作者使用带有静态方法的类,并将带有静态方法的类传递给路由器。
router.post('/user/name', (req, res, next) => {
UserController.getName(req, res, next);
});
router.post('/user/surname', (req, res, next) => {
UserController.getSurname(req, res, next);
});
我不喜欢使用静态方法的类。并且更喜欢创建实例。
router.post('/user/name', (req, res, next) => {
new UserController(req, res, next).getName();
});
router.post('/user/surname', (req, res, next) => {
new UserController(req, res, next).getSurname();
});
让我们想象有1000个对/user/surname
的呼叫。因此,据我了解,将创建1000个UserController
对象(然后它们将由于不可用而被GC销毁)。那正确吗?如果可以,使用静态方法也许会更好,因为它们是在类加载时创建一次的?
答案 0 :(得分:1)
因此,据我了解,将创建1000个
UserController
对象(然后它们将由于不可用而被GC销毁)。是吗?
是的,这是正确的。
如果可以,使用静态方法也许会更好,因为它们是在类加载时创建一次的?
是的。静态方法基本上只是作为对象属性提供给您的函数。没有理由避免它们。您应该将它们视为函数调用,其中函数名称在对象上命名为名称空间。当然,您不希望Javascript避免所有函数调用。而且,这里所需要做的只是一个函数调用。通常,您应该避免创建仅用于一个方法调用然后再进行垃圾回收的对象,因为这是不必要的开销。
仅供参考,如果您真的不想在类上使用静态方法,则只需声明一个普通对象,然后将方法作为该对象的属性即可:
let obj = {
method1: function() {},
method2: function() {}
};
obj.method1();