【发布时间】:2012-03-16 10:49:43
【问题描述】:
我正在尝试在 Javascript 中做更多的 OOP。 我想不通的一件事是如何从另一个函数修改对象内部的变量?
我是这样尝试的:
function Ball(){
radius = 5;
Y = 20;
X = 25; // The value i would like to change.
ctx.arc(this.X, this.Y, this.radius, 0, Math.PI*2, true);
ctx.fillStyle = '#00ff00';
ctx.fill();
}
function draw(){
Player();
Ball();
}
function update(){
ctx.clearRect(0, 0, 800, 400);
draw();
Ball.X++; // This is where i want to modify the value.
}
到目前为止,我只能将 X 定义为全局变量,但我不想这样做,因为还有其他 X 和 Y 值。
那么我如何从函数外部访问变量呢?
编辑: “nnnnnn”提供的解决方案在一定程度上起作用,它改变了 X 值,但我遇到了另一个问题。 我的 clearRect 不会清除动画,所以它画的不是一个球,而是一条刚刚增长的线。
这就是代码现在的样子:
function Ball(){
this.radius = 5;
this.Y = 20;
this.X = 25;
this.draw = function() {
ctx.arc(this.X, this.Y, this.radius, 0, Math.PI*2, true);
ctx.fillStyle = '#00ff00';
ctx.fill();
};
}
var ball = new Ball();
function draw(){
Player();
ball.draw();
}
function update(){
ctx.clearRect(0, 0, 800, 400);
draw();
ball.X++;
}
我试过移动它,把它放在 draw() 和 ball.draw() 函数中,但仍然得到相同的结果,我也尝试做一个 fillRect 而不是 clear,但它没有帮助。 任何人都可以看到什么是错的?
【问题讨论】:
-
没什么不好的感觉,但我宁愿先学走路再跑。您的代码看起来不是很有野心。您不是在处理实例/对象,您只是在函数中有变量(甚至不是本地变量)。
-
是的,它们曾经是 this.X 和 this.Y 等,但由于它们是本地的,我试图让它们全局可变:D
标签: javascript oop