Javascript Nodejs:node.js中的对象变量
我有两个文件。我正在将一个文件的多个对象创建到另一个文件中 module1.jsJavascript Nodejs:node.js中的对象变量,javascript,node.js,Javascript,Node.js,我有两个文件。我正在将一个文件的多个对象创建到另一个文件中 module1.js var a = 5; var check1 = function(){ a = a + 10; console.log(a); } exports.check = check1; var c = require('../module1'); var d = require('../module1'); c.check(); d.check(); function Check() {
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
module2.js
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
输出为15&25
使用var声明变量时,作用域是局部的。我正在创建module.js的两个实例。那么为什么它会在全球层面上被宣布,因为它的输出是15&25
我需要输出为15和15,因为我想使用这个变量作为对象级变量。我该怎么办?每当您执行
要求时,它都会返回对已加载到内存中的模块的引用(如果有)。否则,它将首先加载模块,然后返回对它的引用。更多信息请访问
所以,两个变量实际上都指向同一个对象。您可以通过require
ing任何模块来验证这一点
var a = require('http');
var b = require('http');
console.log(a==b); // true
这是为了防止在加载循环依赖项时出现无限循环
根据您模块的代码,您可以做几件事来解决此问题
您可以在函数中移动变量定义,例如:
var check1 = function(){
var a = 5;
a = a + 10;
console.log(a);
}
exports.check = check1;
或者,您可以编写一个函数,在每次调用时创建一个新对象
var create = function () {
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
return {
check1: check1
}
}
exports.create = create;
在主文件中:
// or you can store require('./module1') to a single variable
var a = require('./module1').create();
var b = require('./module1').create();
a.check1();
b.check1();
无论何时执行require
,它都会返回对已加载到内存中的模块的引用(如果有)。否则,它将首先加载模块,然后返回对它的引用。更多信息请访问
所以,两个变量实际上都指向同一个对象。您可以通过require
ing任何模块来验证这一点
var a = require('http');
var b = require('http');
console.log(a==b); // true
这是为了防止在加载循环依赖项时出现无限循环
根据您模块的代码,您可以做几件事来解决此问题
您可以在函数中移动变量定义,例如:
var check1 = function(){
var a = 5;
a = a + 10;
console.log(a);
}
exports.check = check1;
或者,您可以编写一个函数,在每次调用时创建一个新对象
var create = function () {
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
return {
check1: check1
}
}
exports.create = create;
在主文件中:
// or you can store require('./module1') to a single variable
var a = require('./module1').create();
var b = require('./module1').create();
a.check1();
b.check1();
NodeJS模块系统使用缓存为对同一模块()的所有引用返回同一实例
这将导致代码在c
和d
中具有相同的对象实例
如果希望有两个单独的实例,请尝试以下操作:
module1.js
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
module2.js
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
NodeJS模块系统使用缓存为对同一模块()的所有引用返回同一实例
这将导致代码在c
和d
中具有相同的对象实例
如果希望有两个单独的实例,请尝试以下操作:
module1.js
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
module2.js
var a = 5;
var check1 = function(){
a = a + 10;
console.log(a);
}
exports.check = check1;
var c = require('../module1');
var d = require('../module1');
c.check();
d.check();
function Check() {
var a = 5;
return {
check: function() {
a = a + 10;
console.log(a);
}
};
}
exports.Check = Check;
var Check = require('../module1').Check;
var c = Check();
var d = Check();
c.check();
d.check();
“我正在创建module.js的两个实例”-不,你没有。所有模块只加载一次。“我正在创建module.js的两个实例”-不,你没有。所有模块只加载一次。第一个解决方案非常无用,因为您可以直接记录15(没有其他可能的结果)。第二个解决方案与我展示的类似,但有一个bug…@Amit我认为他没有发布真正的代码。在他发布的示例代码中,是的,第一个代码没有任何意义。但这取决于实际代码是什么,它可能是一个解决方案。请尝试您的代码,看看会发生什么(提示:TypeError:a.check1不是函数)@Amit谢谢您指出这一点。我修正了:)第一个解决方案是非常无用的,因为您可以直接记录15(没有其他可能的结果)。第二个解决方案与我展示的类似,但有一个bug…@Amit我认为他没有发布真正的代码。在他发布的示例代码中,是的,第一个代码没有任何意义。但这取决于实际代码是什么,它可能是一个解决方案。请尝试您的代码,看看会发生什么(提示:TypeError:a.check1不是函数)@Amit谢谢您指出这一点。我修好了:)