use*_*511 3 javascript node.js
我有一个文件A.js,我有一个模块级变量activeCount.我使用module.exports导出它.我有一个测试文件testA.js,我检查的值activeCount.
但是似乎我做的修改A.js,以activeCount不被看见testA.js.我想这可能是因为当我改变时activeCount,它会导致module.exports.activeCount并activeCount指向不同的对象.我是否正确分析了这一点,如果是这样,我如何在activeCount不创建新对象的情况下更改值?
A.js
var activeCount = 0;
...
function reset() {
activeCount = 0;
}
function A() {
...
}
module.exports = A;
module.exports.activeCount = activeCount;
module.exports.reset = reset;
A.prototype.addFunction(...) {
...
activeCount++;
...
}
Run Code Online (Sandbox Code Playgroud)
testA.js
var A = require('A');
test('test1', function (assert) {
var a = new A();
a.addFunction(...);
console.log(A.activeCount); // prints 0 instead of 1
});
test('test2', function (assert) {
A.reset();
var a = new A();
a.addFunction(...);
console.log(A.activeCount); // also prints 0 instead of 1
});
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 11
在Javascript中,当您指定一个整数(或任何基元 - 例如非对象)时,它将被复制到新变量中.因此,对新变量的更改不会影响原始变量.Javascript没有整数的真正引用类型.
通常的解决方法是导出一个对象(由指针指定),然后将整数作为属性放在该对象上.然后,每个引用该对象的人都会看到更改对象的属性.
事实证明,你已经出口活动核心作为一个对象的属性(因为它是一个属性module.exports中A.js的模块.所以,你只需要改变"A"模块从那里使用它,而不是使用它的本地副本有几种不同的方法可以做到这一点.这是一个:
// A.js
function reset() {
// change the exported variable
module.exports.activeCount = 0;
}
function A() {
...
}
module.exports = A;
module.exports.activeCount = 0;
module.exports.reset = reset;
A.prototype.addFunction(...) {
...
// change the exported variable
module.exports.activeCount++;
...
}
Run Code Online (Sandbox Code Playgroud)
现在,您的testA.js模块将按预期工作.
注意,既然你正在做module.exports = A;和函数是对象,你也可以引用activeCount作为模块A内部的属性,A它也可以解决问题并给出所需的结果:
// A.js
function reset() {
// change the exported variable
A.activeCount = 0;
}
function A() {
...
}
// add properties to our constructor function so those properties
// are also exported
A.activeCount = 0;
A.reset = reset;
module.exports = A;
A.prototype.addFunction(...) {
...
// change the exported variable
module.exports.activeCount++;
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4988 次 |
| 最近记录: |