2016-04-07 3 views
-1

я следующий класс:Почему мой геттер каждый раз возвращает другое значение?

class Counter { 

    constructor(start) { 
     this.start = start; 
    } 

    set start(number) { 
     this._start = number; 
    } 

    get start() { 
     return this._start++; 
    } 

    next() { 
     return this.start + 1; 
    } 
} 

Я его экземпляр следующим образом:

let counter = new Counter(23); 

Он отлично работает, если я делаю свою следующую функцию:

counter.next(); // 24 
counter.next(); // 25 
// ... 

Но если выйти start Я всегда получаю что-то другое

counter.start; // 25; 
counter.start; // 26; 

Почему это происходит?

Я сделал что-то не так?

+2

'this._start' или' this.start'? – isvforall

+1

Я не думаю, что это реалистичный вопрос. Пользователи вряд ли столкнутся с этой конкретной ситуацией, кроме как в замысловатых обстоятельствах. –

+1

'this._start ++' будет увеличивать 'this._start' каждый раз, когда он вызывается. Ваш код делает то, что он должен. Если вы не хотите увеличивать 'this._start', тогда не используйте' ++ '. – jfriend00

ответ

3

Да, там что-то не так.

Класс Counter случайно искажает объект в геттере, который был, вероятно, непреднамеренным.

Чтобы исправить это можно сделать:

class Counter { 

    constructor(start) { 
     this.start = start; 
    } 

    set start(number) { 
     this._start = number; 
    } 

    get start() { // always return the current start 
     return this._start; 
    } 

    next() { // increase the start only in the next function! 
     return ++this.start; 
    } 
} 
Смежные вопросы