为变量分配多个nodejs导出返回值时出现问题
Trouble assigning multiple nodejs exports return values to variables
我有两个文件,一个主文件和一个模块文件。在模块文件中,我导出两个函数,它们返回对象。在主文件中,我将为每个方法的返回值设置一个变量。但是,每个变量都设置为调用的最后一个方法的返回值。我在这里做错了什么?
/* main file */
module.exports = function(robot) {
var startingCharacter = require('./data/starting/character.json'),
make = require('./includes/make.js');
return robot.respond(/dungeon me/i, function(msg) {
var character = startingCharacter,
weapon = make.weapon(0),
armor = make.armor(0);
console.log(weapon); // <- returns value from make.armor(0)
console.log(armor); // <- returns value from make.armor(0)
}
};
/* module file */
var random = require('./random.js');
var baseStats = {
'equipped': 'true',
'attack': '0',
'damage': '0',
'defense': '0',
'health': '0',
'luck': '0',
'passivePower': {},
'activePower': {}
};
// Generate a weapon
exports.weapon = function(level) {
var weaponNames = require('../data/nouns/weapon_names.json');
var thisWeapon = {};
if (level === 0) {
var adjNeg = require('../data/adjectives/negative.json');
thisWeapon = baseStats;
thisWeapon.name = adjNeg[random(0, adjNeg.length)] + ' ' + weaponNames[random(0, weaponNames.length)];
thisWeapon.type = 'weapon';
}
console.log(thisWeapon); // <- returns correct value
return thisWeapon;
};
// Generate armor
exports.armor = function(level) {
var armorNames = require('../data/nouns/armor_names.json');
var thisArmor = {};
if (level === 0) {
var adjNeg = require('../data/adjectives/negative.json'),
animals = require('../data/nouns/animals.json');
var armorName = armorNames[random(0, armorNames.length)];
thisArmor = baseStats;
if (armorName === 'Hide') {
thisArmor.name = animals[random(0, animals.length)] + ' ' + armorName + ' armor';
}
else {
thisArmor.name = adjNeg[random(0, adjNeg.length)] + ' ' + armorName;
}
thisArmor.type = 'armor';
}
console.log(thisArmor); // <- returns correct value
return thisArmor;
};
注意:使用真实代码编辑,而不是示例代码
执行此操作时:
thisArmor = baseStats;
您不是在复制"baseStats"对象。由于模块中的两个方法都修改并返回对同一对象的引用,因此可以获得所观察到的效果。
有几种方法可以实现Node的浅层复制操作;请参阅此Stackoverflow问题。使用其中一种方法,您可以从"baseStats"的本地副本开始这些方法。
相关文章:
- Javascript返回值只在循环中返回一次
- XMLHttpRequest未返回值-状态202
- 根据是否解析了 Promise 从函数返回值
- Angular,函数在(模型)工厂中返回值
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 为变量分配多个nodejs导出返回值时出现问题
- javasctipt-返回值的异步问题
- 从ID Jquery类获取返回值时出现问题
- 从表单javascript返回值时出现问题
- 存在从函数返回值的问题
- 使用jQuery自定义JS Confirm Modals.延迟和基于按钮的返回值问题
- 关于getTime()的返回值的问题
- 我的javascript函数返回值时出现问题
- Javascript元素点击返回值的问题
- 通过函数返回值仍然有问题
- Ajax以json格式返回值问题
- 从所单击的链接返回值时出现问题
- 全局作用域、返回值和ajax的问题
- javascript和返回值的问题
- javascript函数返回值面临的问题