节点.js ES6 类与要求

2022-08-30 04:34:39

所以到目前为止,我通过以下方式创建了类和模块: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);
 }
}

这是正确的方法吗?

另外,如何向节点项目中的其他文件公开此类?如果您在单独的文件中使用此类,是否仍能扩展该类?

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


答案 1

是的,您的示例可以正常工作。

至于公开你的类,你可以像其他任何东西一样使用类:export

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

或者更短的:

module.exports = class Animal {

};

导入到另一个模块后,您可以将其视为在该文件中定义它:

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

class Cat extends Animal {
    ...
}

答案 2

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

ES6语法只是语法糖,并创建完全相同的基础原型,构造函数和对象。

因此,在您的ES6示例中:

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

var a = new Animal();

module.exports = {Animal: Animal};

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


在导入端,这将像这样使用:

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();