Javascript对象是这个范围,这不是修复

时间:2015-04-03 03:35:09

标签: javascript

您好我正在尝试用JavaScript创建俄罗斯方块。我有一个名为data的变量的map对象。当我从对象调用一个函数时,'这个'不再是对象,而是我认为的本地功能。我试过在对象构造函数中使用声明变量_this = this但是没有帮助。

function Map(width, height){
  var _this = this;
  this.data = [];
  for(var i = 0; i < width; i++){
    var row = [];
    for(var n = 0; n < height; n++){
      row.push("0");
    }
    this.data.push(row);
  }
}

Map.prototype.add = function(x, y, shape){
  for(var i in shape){
    for(var n in shape[i]){
      _this.data[x+i][y+n] = shape[i][n];
    }
  }
}

var colMap = new Map(23,30);
var selectedShape = new FallingShape(0, 0, getShapeArray(randomShapeId(), 0));
colMap.add(selectedShape.x, selectedShape.y, selectedShape.shapeArray);

我试图改变数据的价值,但由于范围的原因,我已经尝试过这样的数据了。诀窍但不起作用。谁能帮我理解?

如果您想查看整个代码,请提供指向codepen页面的链接。 http://codepen.io/taylorlutjen/pen/OPGwoo?editors=001

1 个答案:

答案 0 :(得分:2)

您在构造函数中创建的_this局部变量是 函数的本地变量 - 它在其他函数中无法使用。

好消息是你真的不需要它 - 只需在this函数中使用.add()

构造函数中的局部变量与任何其他函数中的局部变量没有区别。它们并不神奇,它们肯定不会被添加到构造函数原型中的其他函数使用。创建_this值的thatselfthis副本的原因是为了能够创建需要引用外部上下文的回调函数宾语。您的代码(在此处发布)都不需要。