Javascript 循环内的值不变
有人能告诉我如何更改template.portNumber值吗 预期: 很抱歉这个愚蠢的问题,但我真的坚持了下来。同样的代码在python中运行良好。Javascript 循环内的值不变,javascript,Javascript,有人能告诉我如何更改template.portNumber值吗 预期: 很抱歉这个愚蠢的问题,但我真的坚持了下来。同样的代码在python中运行良好。 谢谢。您的数组最终有三个对同一对象的引用,因此每次对其进行变异时,所有数组元素中的更改都是可见的 写入端口[0]。端口=99也将更改端口[1]。端口,因为端口[0]和端口[1]是同一个对象 您需要创建对象的副本…模板对象通过引用传递,因此所有项都引用同一对象。它最终看起来有点像这样: template = {portNumber: 3, stuf
谢谢。您的数组最终有三个对同一对象的引用,因此每次对其进行变异时,所有数组元素中的更改都是可见的 写入端口[0]。端口=99也将更改端口[1]。端口,因为端口[0]和端口[1]是同一个对象 您需要创建对象的副本…模板对象通过引用传递,因此所有项都引用同一对象。它最终看起来有点像这样:
template = {portNumber: 3, stuff: ""};
return {ports: {1:template, 2: template, 3: template}}
你需要,然后设置它
var template = {
portNumber: null,
stuff: ""
}
myfunc(template, 3);
function myfunc(template, count) {
var ports = {}
for (var i = 0; i < count; i++) {
var portNumber = i + 1;
ports[portNumber] = JSON.parse(JSON.stringify(template));
ports[portNumber].portNumber = portNumber;
}
console.debug(JSON.stringify(ports, null, 4));
return ports;
}
另外,您不需要手动对数字键进行字符串化,它是自动完成的。所有数组对象都是引用类型,因此只指向一个实例 尝试像这样使用构造函数
var template = function(portno, stf){
this.portNumber = portno;
this.stuff = stf;
}
myfunc(template, 3);
function myfunc(template, count) {
var ports = {}
for (var i = 0; i < count; i++) {
var portNumber = i + 1;
ports[portNumber.toString()] = new template(portNumber , template.stuff);
}
console.debug(JSON.stringify(ports, null, 4));
return ports;
}
这是一个参考问题 console.logmyFunctemplate,3; 函数myFunctemplate,count{ 变量端口={} 对于变量i=0;i
function myFunc (template, count) {
var ports = {};
for(var i = 0; i < count; i++) {
var portNumber = i + 1;
var tmplt = JSON.parse(JSON.stringify(template));
tmplt.portNumber = portNumber;
ports[portNumber + ''] = tmplt;
}
return ports;
}
这里已经回答了您的问题:请阅读中的闭包JS@PaulD“安布拉,这不是一个结束的问题。啊,模糊的晨脑。。。你完全正确@Juhananew templateportno,template.stuff;应为new templateportNumber,template.stuff;。另外,由于您将端口号传递给模板,所以可以删除行ports[portNumber.toString].portNumber=portNumber。
var template = {
portNumber: null,
stuff: ""
}
myfunc(template, 3);
function myfunc(template, count) {
var ports = {}
for (var i = 0; i < count; i++) {
var portNumber = i + 1;
ports[portNumber] = JSON.parse(JSON.stringify(template));
ports[portNumber].portNumber = portNumber;
}
console.debug(JSON.stringify(ports, null, 4));
return ports;
}
var template = function(portno, stf){
this.portNumber = portno;
this.stuff = stf;
}
myfunc(template, 3);
function myfunc(template, count) {
var ports = {}
for (var i = 0; i < count; i++) {
var portNumber = i + 1;
ports[portNumber.toString()] = new template(portNumber , template.stuff);
}
console.debug(JSON.stringify(ports, null, 4));
return ports;
}
function myFunc (template, count) {
var ports = {};
for(var i = 0; i < count; i++) {
var portNumber = i + 1;
var tmplt = JSON.parse(JSON.stringify(template));
tmplt.portNumber = portNumber;
ports[portNumber + ''] = tmplt;
}
return ports;
}