在javascript中更新对象的定义

the*_*ird 2 javascript

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

这是我目前拥有的非常精简的版本,但概念基本相同.当用户点击我页面上的画布元素时,我在下面创建20个粒子对象实例,将它们附加到数组,同时在30FPS更新画布并根据每个实例的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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望用户能够控制使用页面上的输入元素创建的新粒子的速度.当这更新时,我有一个事件监听器调用

particle.updateVelocity(whateverTheUserEntered);
Run Code Online (Sandbox Code Playgroud)

但是我得到错误"粒子没有方法updateVelocity".在对该主题进行了一些阅读后,我明白要调用该函数我需要创建一个对象实例,但这只会更新该实例的速度值,这对我来说不起作用.

我的问题是,有没有办法实现我正在做的事情,或者我是以完全错误的方式接近这个?正如我所说,我仍然在掌握OOP原则,所以我可能刚刚回答了我自己的问题......

cwa*_*ole 5

试试这个:

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

})();
Run Code Online (Sandbox Code Playgroud)

您正在创建一个函数,然后将变量粒子设置为该值.particle因此不会有任何特殊属性.但是,我上面的示例通过使用new和作为构造函数的函数来分配particle一个(现在是匿名的)类的实例.