我的问题是如果在nodejs或函数或原型和模块中使用类更好,我知道大多数使用模块和函数原型,但哪个更好?
我们大多数人认为,所有编程语言中的类都是最好的工作选择。
提前谢谢
答案 0 :(得分:1)
我的问题是如果在nodejs或函数或原型和模块中使用类更好,我知道大多数使用模块和函数原型,但哪个更好?
您的问题似乎有点误导。在node.js中,不会在类,原型和模块之间进行选择。
Javascript中的第一个关闭类使用原型。 class
语法只是用于在原型上定义构造函数和方法的语法糖。当您使用class
语法时,您将创建一个带有原型的构造函数,并将方法添加到原型中(在封面下)。因此,在使用类和使用原型之间没有权衡。
唯一的权衡是使用新的class
语法来定义原型与使用旧的手动方式。
然后,类几乎与模块正交。当您想要在模块接口中封装代码体时,可以使用模块,这样您就可以获得使用模块的所有好处(更容易共享,重用,记录,测试等......)。该模块界面可以是您认为最适合您环境的任何内容。您可以导出一系列普通函数。您可以导出一个或多个对象构造函数。您可以导出为您创建对象的工厂函数,然后可以使用方法。模块方案非常灵活,因此您可以导出几乎任何类型的接口(如果您愿意,类可以是其中的一部分)。
没有“最佳”方式从模块中导出东西,因为它取决于您的需求,您选择的架构和编码风格等......
答案 1 :(得分:1)
您要查找的问题是 类与原型 。
使用了 类 和 原型 >模块 。
模块(ES2015模块)是JavaScript用来export
和import
进行编码的模块。在JavaScript正式实现模块之前,有黑客可以这样做并创建代码封装,从而解决了诸如污染全球范围等问题。 Immediately Invoked Function Expressions
是一个示例。带有CommonJS的Node.js和带有AMD的Angular以及其他一些公司试图找出如何以更好的方式做到这一点,并实现了自己的“模块”系统。我想认为ES2015模块受其他语言和CommonJS / Amd等的影响,因此,我们现在有了使用JavaScript的模块系统。
对于类,它们自己创建代码封装,但是不能导出自身,这就是模块的作用。基于原型的代码也是如此,它创建代码封装,但不能像类一样自我导出。
现在将其放在一起。
一个模块示例,该示例与类或原型only-a-module.js
无关:
const privateHello = 'hello' // <- module code (private)
export const publicHello = 'hello'; // <- module code (public)
使用类的模块示例,module-that-exports-a-class.js
:
export class Classes { // <- module AND class code (public)
private privateHello = 'hello'; // <- class code (private)
public publicHello = 'hello'; // <- class code (public)
} // <- class code (public)
const anotherPrivateHello = 'hello'; // <- module code (private)
export const anotherPublicHello = 'hello'; // <- module code (public)
在上面的示例中,私人
使用原型module-that-exports-a-prototype.js
的模块示例:
export function Prototypes() { // <- module AND prototype code (public)
const privateHello = 'hello'; // <- prototype code (private)
this.publicHello = 'hello'; // <- prototype code (public)
} // <- prototype code (public)
const anotherPrivateHello = 'hello'; // <- module code (private)
export const anotherPublicHello = 'hello'; // <- module code (public)
这使来自OOP语言的初学者感到困惑的是,例如,在Java中,将类文件(file.class)自动导出为类,默认情况下,这是Java的方式作品。 JavaScript中不是这种情况。您必须声明要导出的内容。
类是一种尝试实现所谓的classical inheritance
的尝试,而原型是prototypal inheritance
。这是处理 代码重用 和保持其 自己状态 em> 的对象的两种方法。
如果我们想使事情变得更加复杂,那么一个很好的后续问题是OOP vs. functional programming
。但是您可以在其他地方阅读。
答案 2 :(得分:-2)
我会告诉你我所看到的。 这是一种工作nodejs的方法
IndexController =()=&gt; {}
IndexController.index =(req,res,next){ .... }
但这是在nodejs中工作的其他方式
Class IndexController(){ Def myFunction(){ .... }
}
特权有什么不同吗?为什么要以这样不同的方式工作?