语言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(){}
答案 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)