不时更改类的属性

时间:2015-04-07 21:31:06

标签: javascript

我有两个功能。在第一个中,我通过向它添加100来增加变量,并且我放置了一个setInterval,因此函数会在一段时间后重复。另一个函数是一个类,一个创建对象的控制器。我希望this.x_origen通过在一段时间后添加aumento来增加并重复它。然而,我在这里得到的是第一个函数增加了aument然后它完成然后第二个函数开始。我该如何解决这个问题?

var aument = 0;
function aumento(){ 
    aument = aument + 100;
    return aument;
}
setInterval(function () {aumento()}, 1000/50);
function create_class_brick (x_origen_in, y_origen_in, x_final_in, y_final_in, mi_estado, mi_velocidad, mi_id){

    this.x_origen = x_origen_in + aumento();
    this.y_origen = y_origen_in;
    this.x_final = x_final_in + aumento();
    this.y_final = y_final_in;         
    this.estado = mi_estado;
    this.velocidad = mi_velocidad;
    this.id_elemento = mi_id;

    this.DESPLAZAR_LADRILLO  = desplazar_ladrillo;
    this.F0 = f0;
    this.F2 = f2;

    this.crear_ladrillo = crear_ladrillo;
    this.obtener_x_origen_ladrillo = obtener_x_origen_ladrillo;
    this.obtener_y_origen_ladrillo = obtener_y_origen_ladrillo;
    this.obtener_x_final_ladrillo = obtener_x_final_ladrillo;
    this.obtener_y_final_ladrillo = obtener_y_final_ladrillo;
}

2 个答案:

答案 0 :(得分:0)

有关如何等待初始调用的示例:

function brick (x_origen_in){
    this.x_origen = x_origen_in;
}

function aumento(brick){
    console.log(brick.x_origen);
    brick.x_origen += 100;
    setTimeout(aumento.bind(this, brick), 500);
}

var brick = new brick(100);
aumento(brick);

http://jsfiddle.net/x6c08u39/

答案 1 :(得分:0)

您可以使用Object.defineProperty在访问时动态生成值。

首先,让我们简化aument的自动递增:

var aument = 0;
function aumento(){ 
  aument += 100;
}

// The first argument for setInterval is the function to execute
// No need to figure out the interval value at runtime as there are no dynamic values
setInterval(aumento, 20); // 1000/50 === 20

现在让我们创建一个具有正确值的对象:

function create_class_brick (x_origen_in, y_origen_in, x_final_in, y_final_in, mi_estado, mi_velocidad, mi_id){
  Object.defineProperty(this, 'x_origen', {
    get: function () { return x_origen_in + aument; }
  });
  // Other stuff
  // ...  
}

快速测试:

> aument
34100
> var obj = new create_class_brick(23);
undefined
> obj.x_origen
161523
> obj.x_origen
167223
> obj.x_origen
172423