将重复的代码集中到一个文件中
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)
语言 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)