如何在 javscript/node 中导入对象
How to import objects in javscript/node
假设我有一个文件:main2.js
exports.obj = {
x : 10,
setX : function (y)
{
this.x = y;
},
getX : function()
{
return this.x;
}
};
有 2 个文件:- abc.js
const obj = require("./main2").obj;
describe("Test", function(){
it("Set X", () => {
obj.setX(50);
})
})
def.js
const obj = require("./main2").obj;
describe("Test", function(){
it("Get X", () => {
console.log(obj.getX());
})
})
当我 运行 将两个文件放在一起时,得到 50 作为输出 ,但预期 10 作为输出,即需要两个文件应该有不同的 obj 实例,如何实现它
当您使用 require 时,您将获得一个单例实例,因此第二次调用将返回与第一次相同的值。
您必须导出工厂功能。例如:
exports.generateObj = function(){
return {
x : 10,
setX : function (y)
{
this.x = y;
},
getX : function()
{
return this.x;
}
}
};
并将其他 .js 更改为:
const obj = require("./main2").generateObj();
而不是:
const obj = require("./main2").obj;
问题是您有一个对象,其中有几个对同一对象的引用。
如果你想每次都有一个不同的对象,你可能想使用一个函数或一个 class 来 return 这个对象。
应该是这样的:
main2.js
exports.obj = function() {
return {
x : 10,
setX : function (y) {
this.x = y;
},
getX : function() {
return this.x;
}
};
};
然后更改其他文件以使用const obj = require("./main2").obj()
也许另一种解决方案是不公开 x
filea.js
//Module.exports 允许您在不命名的情况下导出函数
module.exports = () =>{// or module.exports = function(){
let x=10;
function setX(i){
x=i;
}
function getX(){
return x;
}
return {getX,setX}
}
fileb.js
const myPseudoClass= require('./fila');
const obj = myPseudoClass();
// can be replaced by const obj = require('./fila')();
console.log('x=',obj.getX());
obj.setX(50);
console.log('x=',obj.getX());
假设我有一个文件:main2.js
exports.obj = {
x : 10,
setX : function (y)
{
this.x = y;
},
getX : function()
{
return this.x;
}
};
有 2 个文件:- abc.js
const obj = require("./main2").obj;
describe("Test", function(){
it("Set X", () => {
obj.setX(50);
})
})
def.js
const obj = require("./main2").obj;
describe("Test", function(){
it("Get X", () => {
console.log(obj.getX());
})
})
当我 运行 将两个文件放在一起时,得到 50 作为输出 ,但预期 10 作为输出,即需要两个文件应该有不同的 obj 实例,如何实现它
当您使用 require 时,您将获得一个单例实例,因此第二次调用将返回与第一次相同的值。 您必须导出工厂功能。例如:
exports.generateObj = function(){
return {
x : 10,
setX : function (y)
{
this.x = y;
},
getX : function()
{
return this.x;
}
}
};
并将其他 .js 更改为:
const obj = require("./main2").generateObj();
而不是:
const obj = require("./main2").obj;
问题是您有一个对象,其中有几个对同一对象的引用。 如果你想每次都有一个不同的对象,你可能想使用一个函数或一个 class 来 return 这个对象。
应该是这样的:
main2.js
exports.obj = function() {
return {
x : 10,
setX : function (y) {
this.x = y;
},
getX : function() {
return this.x;
}
};
};
然后更改其他文件以使用const obj = require("./main2").obj()
也许另一种解决方案是不公开 x
filea.js
//Module.exports 允许您在不命名的情况下导出函数
module.exports = () =>{// or module.exports = function(){
let x=10;
function setX(i){
x=i;
}
function getX(){
return x;
}
return {getX,setX}
}
fileb.js
const myPseudoClass= require('./fila');
const obj = myPseudoClass();
// can be replaced by const obj = require('./fila')();
console.log('x=',obj.getX());
obj.setX(50);
console.log('x=',obj.getX());