Js ES6类

因此,到目前为止,我已经在 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

所以你创建你的文件:


动物

var fs = require('fs');
class Animal{


constructor(name){
this.name = name ;
}


print(){
console.log('Name is :'+ this.name);
}
}

这条路对吗?

另外,如何将此类公开给我的节点项目中的其他文件?如果您在单独的文件中使用这个类,是否仍然可以扩展它?

我希望你们中的一些人能够回答这些问题:)

182440 次浏览

是的,你的例子很好。

至于公开你的类,你可以像公开其他类一样公开一个类:

class Animal {...}
module.exports = Animal;

或者更短:

module.exports = class Animal {


};

一旦导入到另一个模块中,就可以将其视为在该文件中定义的:

var Animal = require('./Animal');


class Cat extends Animal {
...
}

ES6的需求方式是 import。您可以使用 import { ClassName } from 'path/to/ClassName'语法将类 export并导入到其他地方。

import fs from 'fs';
export default class Animal {


constructor(name){
this.name = name ;
}


print(){
console.log('Name is :'+ this.name);
}
}


import Animal from 'path/to/Animal.js';

只需将 ES6类名视为与以 ES5方式处理构造函数名相同的名称即可。他们是同一个人。

ES6语法只是一种语法糖,它创建了完全相同的底层原型、构造函数和对象。

因此,在您的 ES6示例中:

// animal.js
class Animal {
...
}


var a = new Animal();


module.exports = {Animal: Animal};

您可以将 Animal视为对象的构造函数(与在 ES5中所做的相同)。可以导出构造函数。可以用 new Animal()调用构造函数。使用它一切都是一样的。只是声明语法不同。甚至还有一个 Animal.prototype上面有你所有的方法。ES6方法确实创建了相同的编码结果,只是语法更花哨/更好。


在进口方面,这将像下面这样使用:

const Animal = require('./animal.js').Animal;


let a = new Animal();

此方案将 Animal 构造函数作为 .Animal属性导出,该属性允许您从该模块导出多个内容。

如果你不需要出口一样以上的东西,你可以这样做:

// animal.js
class Animal {
...
}


module.exports = Animal;

然后,通过以下方式导入:

const Animal = require('./animal.js');


let a = new Animal();

在节点中使用类-

这里我们需要 ReadWrite 模块并调用 makObject () ,它返回 ReadWrite 类的对象。我们用它来调用方法。 Index.js

const ReadWrite = require('./ReadWrite').makeObject();
const express = require('express');
const app = express();


class Start {
constructor() {
const server = app.listen(8081),
host = server.address().address,
port = server.address().port
console.log("Example app listening at http://%s:%s", host, port);
console.log('Running');


}


async route(req, res, next) {
const result = await ReadWrite.readWrite();
res.send(result);
}
}


const obj1 = new Start();
app.get('/', obj1.route);
module.exports = Start;

读写网

这里我们创建了一个 makObject 方法,它确保只有在对象不可用时才返回对象。

class ReadWrite {
constructor() {
console.log('Read Write');
this.x;
}
static makeObject() {
if (!this.x) {
this.x = new ReadWrite();
}
return this.x;
}
read(){
return "read"
}


write(){
return "write"
}




async readWrite() {
try {
const obj = ReadWrite.makeObject();
const result = await Promise.all([ obj.read(), obj.write()])
console.log(result);
check();
return result
}
catch(err) {
console.log(err);


}
}
}
module.exports = ReadWrite;

更多解释请访问 https://medium.com/@nynptel/node-js-boiler-plate-code-using-singleton-classes-5b479e513f74

在类文件中,你可以使用:

module.exports = class ClassNameHere {
print() {
console.log('In print function');
}
}

或者可以使用这种语法

class ClassNameHere{
print(){
console.log('In print function');
}
}


module.exports = ClassNameHere;

另一方面,要在任何其他文件中使用此类,则需要执行以下步骤。 首先要求该文件使用以下语法: const anyVariableNameHere = require('filePathHere');

然后创建一个对象 const classObject = new anyVariableNameHere();

在此之后,您可以使用 classObject来访问实际的类变量