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

问题描述 投票:0回答:1

语言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(){}
node.js require
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.