繁体   English   中英

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

[英]JavaScript updating last index class data

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

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);

它会更新最后一个索引项目得分,并调用最后一项“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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM