Как отслеживать предыдущее значение в методе в JavaScript? - PullRequest
2 голосов
/ 04 мая 2011

Мне нужно сравнить текущее целое с предыдущим целым в методе.Кажется, что-то вроде этого должно работать, но это не так.Может кто-нибудь сказать мне, где проблема?Примечание ток устанавливается вне метода.

myMethod : function() {
    var previous;

    if ( current > previous ) {
        // do this!
    }

    previous = current;
}

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Каждый раз, когда вы звоните myMethod, previous объявляется заново (var previous).

У вас есть четыре возможности:

(A) Создайте замыкание (лучшее решение imo, но зависит от ваших потребностей):

myMethod : (function() {
    var previous = null;
    return function() {
        if ( current > previous ) {
            // do this!
        }  
        previous = current;
    }
}());

(B) Установить previous как свойство объекта функции:

myMethod : function() {
    if ( current > foo.myMethod.previous ) {
        // do this!
    }   
    foo.myMethod.previous = current;
}

foo.myMethod.previous = null;

Но это очень сильно связывает функцию с именованием объекта.

(C) Если это вписывается в вашу модель, сделайте previous свойством объекта myMethod - это свойство:

previous: null,
myMethod : function() {
    if ( current > this.previous ) {
        // do this!
    }
    this.previous = current;
}

(D) Аналогично (A), установите previous где-то снаружи в более высокой области видимости:

var previous = null;
// ...
myMethod : function() {

    if ( current > previous ) {
        // do this!
    }  
    previous = current;
}

Это не хороший имо, поскольку он загрязняет высшую область.

Трудно сказать, не видя больше вашего кода, но, вероятно, также лучше, если вы передадите current функции.

0 голосов
/ 04 мая 2011

Похоже, вы пытаетесь реализовать функцию памятки.Есть хорошее руководство о том, как это сделать здесь .

0 голосов
/ 04 мая 2011

Вам просто нужно поддерживать состояние.

var previousState = 'something';

function myMethod(current)
{
    if(current > previousState)
       // Do Something

    previousState = current;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...