我对面向对象的东西相当陌生,所以这很可能是完成这项工作的错误方法。
这是我目前拥有的版本的一个非常精简的版本,但概念本质上是相同的。当用户单击页面上的 Canvas 元素时,我会创建下面粒子对象的 20 个实例,将它们附加到一个数组,同时以 30FPS 更新 Canvas 并根据每个实例的 x 属性绘制圆圈目的。一旦粒子离开屏幕,它就会从数组中删除。
var particle = function()
{
var _this = this;
this.velocity = 1;
this.x = 0;
this.updateVelocity = function(newVelocity)
{
_this.multiplier = newVelocity;
}
var updateObject = function()
{
_this.x += velocity;
}
}
我希望用户能够控制使用页面上的输入元素创建的新粒子的速度。更新后,我有一个事件监听器调用
particle.updateVelocity(whateverTheUserEntered);
但是我收到错误“粒子没有 updateVelocity 方法”。在阅读了一些关于该主题的内容之后,我了解到要调用该函数,我需要创建该对象的一个实例,但这只会更新该实例的速度值,这对我来说不起作用。
我的问题是,有没有办法实现我正在做的事情,或者我是否以完全错误的方式实现了这一目标?正如我所说,我仍在掌握 OOP 原则,所以我可能刚刚回答了我自己的问题......
最佳答案
试试这个:
var particle = new (function()
{
var _this = this;
this.velocity = 1;
this.x = 0;
this.updateVelocity = function(newVelocity)
{
_this.multiplier = newVelocity;
}
var updateObject = function()
{
_this.x += velocity;
}
})();
您正在创建一个函数,然后将变量粒子设置为该值。因此,粒子
不会有任何特殊属性。然而,我上面的示例通过使用 new
并将函数作为构造函数分配 article
一个(现在是匿名)类的实例。
关于javascript - 在 javascript 中更新对象的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524387/