JavaScript更新最后一个索引类数据

JavaScript updating last index class data

本文关键字:数据 索引 最后一个 更新 JavaScript      更新时间:2024-01-19

我有以下问题。我有一个对象数组,当我想获取其中一个项并更新数据时,它会更新最后的数据。例如:

var arr = [];
for (var i = 0; i < 8; i++){
  var c = new MyClass1(i);
  arr.push (c)
}

和MyClass1

(function () {
var score = 0;
function MyClass1(id){
   this.id = id;
   this.x = 100;
  //some code. not important
}
var p = MyClass1.prototype;
 p.updateScore = function (s){
 score = s;
}
 window.MyClass1 = MyClass1;
}());

以及返回其中一个类的函数

var getMyClassesById = function(/* int */ id){
var size = arr.length;
for (var i = 0; i<size; i++){
   if (id == arr[i].id){
      return arr [i];
   }
  }
}

最后,我正在调用函数,并希望更新分数

getMyClassesById(1).updateScore (122);

它更新最后一个索引项Score,并调用最后一个项"updateScore"函数。。。为什么?但当我更改其他属性时,它会正确更改,例如"x"。我不明白这是不是原型不对劲?

您的变量score没有定义为MyClass的成员,它只在闭包的范围内定义。您的代码可以工作,但对于MyClass的所有实例,只有1个"分数"。

如果分数应该是MyClass的一部分,那么将其移动到

function MyClass1(id){
   this.id = id;
   this.x = 100;
   this.score = 0
  //some code. not important
}

并更新方法:

var p = MyClass1.prototype;
p.updateScore = function (s){
  this.score = s;
}

(function () {
function MyClass1(id){
   this.id = id;
   this.x = 100;
    this.score = 0;
  //some code. not important
}
var p = MyClass1.prototype;
 p.updateScore = function (s){
 this.score = s;
}
 window.MyClass1 = MyClass1;
}());
var arr = [];
for (var i = 0; i < 8; i++){
  var c = new MyClass1(i);
  arr.push (c)
}
var getMyClassesById = function(/* int */ id){
var size = arr.length;
for (var i = 0; i<size; i++){
   if (id == arr[i].id){
      return arr [i];
   }
  }
}
getMyClassesById(1).updateScore (122);
console.log(arr);