2015-04-07 56 views
0

我有两个函数。在第一个例子中,我通过增加100来增加一个变量,然后我放置一个setInterval,以便函数在一段时间后重复。另一个功能是一个类,一个创建对象的控制器。我想通过在一段时间后添加aumento来增加this.x_origen并重复它。然而,我在这里得到的是,第一个函数增加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; 
} 
+0

是否希望'this.x_origen'定期更新为'aument'的当前值?还是每当'aument'更新时都更新'this.x_origen'? –

+0

@Jason Cust随着音素增加,我希望this.x_origen也增加。所以这将是你提到的第二个结果。 – nmn

+0

这就是Javascript的一个新的提议,称为['Object.observe'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe)将允许你做。不幸的是,它在大多数浏览器上都没有默认实现,所以它不会一直可用。也就是说,您可以使用polyfill或使用内部轮询解决方案。虽然取决于要创建多少个对象,但我会关注性能。 –

回答

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/

+0

但不给我我要找的结果。我希望this.x_origen随着aument的增加而增加。 – nmn

+0

@nmn我认为你可以找出为了实现该改变什么 – Johan

+0

我应该改变setTimeout setInterval?我很抱歉,如果我不明白,我是比较新的Javascript。 – nmn

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