javascript - 在 javascript 中更新对象的定义

标签 javascript

我对面向对象的东西相当陌生,所以这很可能是完成这项工作的错误方法。

这是我目前拥有的版本的一个非常精简的版本,但概念本质上是相同的。当用户单击页面上的 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/

相关文章:

JavaScript : Check if object has properties

javascript - 如何实现水平和垂直平滑滚动

javascript - 如何比较2个数组的索引值?

javascript - 按属性过滤 Emberjs 数据

javascript - 使用 javascript .filter() 删除重复的对象

javascript - jQuery 可排序自己的元素作为占位符

javascript - 如何单击一个元素并在另一个元素中添加文本

javascript - 使用 array.push 没有给出正确结构的数组(不能使用带有过滤功能的数组)

javascript - 动态追加多个TR

javascript - knockoutjs 根据某个值有条件地设置图像 src