语言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(){}
需要一个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)