将重复的代码集中到一个文件中

centralize the repeated code into a single file

语言 nodejs

我有一个庞大的代码,在许多文件中以相同的方式重复:file1.js、file2.js、file3.js、... 每个文件都有相同 class 的不同实例, 唯一的区别是对象实例,

我的情况类似于这个伪代码

    fileClass1.js
    MyClass1{
        constructor(name) {
            this.name = name;
        }    
        printName(from){
            console.log("Hello "+this.name+" from "+from)
        }
    }

    file1.js
        var obj = obj1 = new MyClass1("name1")

        //call MyClass1::printName()
        obj.printName("foo")
        obj.printName("bar")

        //methods definition 
        obj.method2 = function(){}
        obj.method3 = function(){}

    file2.js
        var obj = obj2 = new MyClass1("name2")

        //call MyClass1::printName()
        obj.printName("foo")
        obj.printName("bar")

        //methods definition 
        obj.method2(){}
        obj.method3(){}

    file3.js
        var obj = obj3 = new MyClass1("name3")

        //call MyClass1::printName()
        obj.printName("foo")
        obj.printName("bar")

        //methods definition 
        obj.method2(){}
        obj.method3(){}

    . . .

我想得到的结果如下图: 一个 include.js 文件,其中包含调用方法的代码和方法的定义,如果两者都不可能,则只有两者之一

    fileClass1.js
    MyClass1{
        printName(){
            console.log("method1 Hello!")
        }
    }

    file1.js
        var obj = obj1 = new MyClass1("name1")
        require(include.js)


    file2.js
        var obj = obj2 = new MyClass1("name1")
        require(include.js)

    file3.js
        var obj = obj3 = new MyClass1("name1")
        require(include.js)

    . . .

    include.js
        //call MyClass1::printName()
        obj.printName("foo")
        obj.printName("bar")

        //methods definition 
        obj.method2(){}
        obj.method3(){}

需要 JS 文件并不意味着它必须立即 运行,您可以在 include.js 中创建一个函数并在 稍后 中调用该函数],而不是它的代码立即执行。

阅读更多关于 JS Modules

// include.js
module.exports = function(obj) {
    obj.printName("foo")
    //call MyClass1::printName()
    obj.printName("foo")
    obj.printName("bar")

    //methods definition 
    obj.method2(){}
    obj.method3(){}
}

从现在开始,当你require('include.js')时,它会return一个可以存储在变量中的函数

// file1.js
var obj = obj1 = new MyClass1("name1")
var doStuff = require('include.js')
doStuff(obj1)


// file2.js
var obj = obj2 = new MyClass1("name1")
var doStuff = require('include.js')
doStuff(obj2)

// file3.js
var obj = obj3 = new MyClass1("name1")
var doStuff = require('include.js')
doStuff(obj3)