Ваш геттер и сеттер используются .Вот что происходит.
testid += 5;
переводится в
test.id = test.id + 5
Сначала вызывается геттер, который возвращает "005"
.Затем он объединяет 5
, в результате чего "0055"
.Так что это эквивалентно:
test.id = "0055";
В установщике он проходит этот тест:
if (num < 100)
Это верно, потому что 55 меньше, чем 100. Так оно и есть:
this._id = '0' + num;
Это объединяет 0
с фронтом, поэтому оно присваивает "00055"
.
Эту проблему можно решить, если сначала получатель преобразует num
в целое число.
set id(num) {
num = parseInt(num);
if (num < 10) {
this._id = '00' + num;
} else if (num < 100) {
this._id = '0' + num;
} else {
this._id = '' + num;
}
}
Но нет способа заставить +=
преобразовать строку в число перед выполнением приращения.Получатель не знает, как вы собираетесь использовать значение, он не может вернуть что-то другое, когда свойство является частью операции приращения.