所以到目前为止,我已经用以下方法在node.js
中创建了类和模块:
var fs = require('fs');
var animalModule = (function () {
/**
* Constructor initialize object
* @constructor
*/
var Animal = function (name) {
this.name = name;
};
Animal.prototype.print = function () {
console.log('Name is :'+ this.name);
};
return {
Animal: Animal
}
}());
module.exports = animalModule;
现在有了ES6,您可以像这样创建“实际”类:
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
现在,首先,我喜欢这个:)但这提出了一个问题,如何结合node.js
的模块结构使用这个?
假设您有一个类,希望在其中使用一个模块,为了演示起见,假设您希望使用fs
因此您创建了文件:
动物.js
var fs = require('fs');
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
这条路对吗?
另外,如何将这个类公开给节点项目中的其他文件?如果在单独的文件中使用这个类,您还能扩展它吗?
我希望你们中的一些人能够回答这些问题:)
5条答案
按热度按时间9gm1akwq1#
是的,你的例子很好。
至于公开类,你可以像处理其他事情一样处理一个类:
或更短的:
导入到另一个模块后,您可以将其视为在该文件中定义的:
r9f1avp52#
只要把ES6的类名当作ES5中的构造函数名来处理,它们是同一个。
ES6语法只是语法糖,它创建了完全相同的底层原型、构造函数和对象。
因此,在您的ES6示例中:
或者,出口报关单可缩短为:
您可以将
Animal
视为对象的构造函数(和你在ES5中做的一样)。你可以导出构造函数。你可以用new Animal()
来调用构造函数。使用它的一切都是一样的。只是声明语法不同。甚至还有一个Animal.prototype
,它上面有你所有的方法。ES6的方式确实产生了相同的编码结果。只是语法更好。在导入端,将按如下方式使用:
或者,它可以只是:
此方案将Animal构造函数导出为
.Animal
属性,该属性允许您从该模块中导出多个内容。如果不需要导出多个内容,可以执行以下操作:
然后,使用以下命令导入:
dgjrabp23#
ES6的require方式是
import
。您可以export
您的类,并使用import { ClassName } from 'path/to/ClassName'
语法将其导入到其他地方。uklbhaso4#
在节点中使用类-
在这里,我们需要ReadWrite模块并调用makeObject(),它返回ReadWrite类的对象,我们用它来调用方法。index.js
这里我们创建了一个makeObject方法,它确保只有在对象不可用时才返回对象。
有关详细说明,请转到https://medium.com/@nynptel/node-js-boiler-plate-code-using-singleton-classes-5b479e513f74
h6my8fg25#
在类文件中,您可以用途:
也可以使用以下语法
另一方面,要在任何其他文件中使用该类,您需要执行以下步骤。首先使用以下语法要求该文件:
const anyVariableNameHere = require('filePathHere');
然后创建对象
const classObject = new anyVariableNameHere();
之后,您可以使用
classObject
访问实际的类变量