Javascript 对象保持未定义状态,即使它';它存储在一个全局数据库中
我正在构建pong并在initialize方法中创建一个拨片,但是,即使将拨片存储为全局变量,该拨片仍然未定义。我也试着把它变成“窗口”的属性。我实际上不想将其存储为全局,但我无法理解为什么它仍然未定义Javascript 对象保持未定义状态,即使它';它存储在一个全局数据库中,javascript,Javascript,我正在构建pong并在initialize方法中创建一个拨片,但是,即使将拨片存储为全局变量,该拨片仍然未定义。我也试着把它变成“窗口”的属性。我实际上不想将其存储为全局,但我无法理解为什么它仍然未定义 var startBtn = $('#startBtn'); startBtn.on("click", function() { initialize(); }); var initialize = function() { paddleOne = { x: 20, y1
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)代码>在初始化函数的末尾;当你使用调试器的时候,你看到你的拨片了吗?你有什么错误吗?你缺少了几个右大括号,不管怎样都可以。虽然理论上这会更好,但它不应该成为问题的根源。