即使对象存储在全局中,对象仍未定义

时间:2015-08-23 00:07:03

标签: javascript

我正在构建pong并在初始化方法中创建一个paddle,但是,即使将paddle存储为全局变量,该paddle仍未定义。我也试过把它变成'窗口'的属性。我实际上并不想将它存储为全局,但我无法弄清楚为什么它仍未定义。

var startBtn = $('#startBtn');

startBtn.on("click", function() {
  initialize();
});

var initialize = function() {
  paddleOne = {
   x: 20,
   y1: 200,
   y2: 270,
   setPaddle: drawPaddle(this.x, this.y1, this.y2),
   translateUp: function() {
    var new_y1 = this.y1 + 10;
    drawPaddle(this.x, new_y1, this.y2);
  }
};

document.onkeydown = function(event) {
  if (event.which == 49) {
    event.preventDefault();
    paddleOne.translateUp();
};

对象的属性不应该在我的js文件中可用吗?

修改

我试图将drawPaddle的函数存储为paddleOne对象的属性,以防函数调用的顺序出现问题:

paddleOne = {
  x: 20,
  y1: 200,
  y2: 270,
  drawPaddle: function () {
    var context = canvas.getContext('2d');
    context.strokeStyle = 'white';
    context.lineWidth = 10;
    context.beginPath();
    context.moveTo(this.x, this.y1);
    context.lineTo(this.x, this.y2);
    context.stroke();
  },
  translateUp: function() {
    var new_y1 = this.y1 + 10;
    this.drawPaddle(this.x, new_y1, this.y2);
  },
  translateDown: function() {
    var new_y2 = this.y2 + 10;
    this.drawPaddle(this.x, this.y1, new_y2);
  }
};    

我最后做的事情是不可取的,我想知道正确的方法。我做的是删除我的js文件周围的document.ready函数声明,然后将脚本加载标记放在html文件的底部。虽然它现在知道桨对象但不知道它的任何属性但它感觉非常糟糕。但是,这将是项目中唯一的js文件。

1 个答案:

答案 0 :(得分:-1)

声明球拍的变量:

var paddleOne; // <============ your paddle variable

var startBtn = $('#startBtn');

startBtn.on("click", function() {
  initialize();
});

var initialize = function() {
  paddleOne = {
   x: 20,
   y1: 200,
   y2: 270,
   setPaddle: drawPaddle(this.x, this.y1, this.y2),
   translateUp: function() {
    var new_y1 = this.y1 + 10;
    drawPaddle(this.x, new_y1, this.y2);
  }
};

document.onkeydown = function(event) {
  if (event.which == 49) {
    event.preventDefault();
    paddleOne.translateUp();
};

现在此代码中的paddleOne变量随处可用