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

时间:2019-04-02 16:25:38

标签: node.js require

语言nodejs

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

我的情况类似于此伪代码

    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(){}

1 个答案:

答案 0 :(得分:1)

需要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')时,它将返回一个可以存储在变量中的函数

// 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)