Javascript 对象保持未定义状态,即使它';它存储在一个全局数据库中

Javascript 对象保持未定义状态,即使它';它存储在一个全局数据库中,javascript,Javascript,我正在构建pong并在initialize方法中创建一个拨片,但是,即使将拨片存储为全局变量,该拨片仍然未定义。我也试着把它变成“窗口”的属性。我实际上不想将其存储为全局,但我无法理解为什么它仍然未定义 var startBtn = $('#startBtn'); startBtn.on("click", function() { initialize(); }); var initialize = function() { paddleOne = { x: 20, y1

我正在构建pong并在initialize方法中创建一个拨片,但是,即使将拨片存储为全局变量,该拨片仍然未定义。我也试着把它变成“窗口”的属性。我实际上不想将其存储为全局,但我无法理解为什么它仍然未定义

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文件中都可用吗

编辑:

我已尝试将DrawPable的函数存储为PaileOne对象上的属性,以防函数调用的顺序出现问题:

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文件上。

为桨声明一个变量:

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

var-paileone;//你正在使用
使用严格的
?我刚刚启用了它。同样的问题。删除它,我不明白你的代码为什么不工作。为什么不想使用
var
?顺便说一句,添加
console.log(windows)在初始化函数的末尾;当你使用调试器的时候,你看到你的拨片了吗?你有什么错误吗?你缺少了几个右大括号,不管怎样都可以。虽然理论上这会更好,但它不应该成为问题的根源。