@NoMoney

Инициализация конструктора в одну строку?

ES2015. Можно ли сделать все присваивания внутри конструктора в одну строку?
class MyClass {
    constructor({title = 'wololo', status = 1}) {
        this.title = title;
        this.status = status;
        // ... больше однотипных строчек
    }
}
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
const defaults = {
  title: 'wololo',
  status: 1
};
const keys = Object.getOwnPropertyNames(defaults);

const validators = {
  status(value) {
    return !isNaN(value) && isFinite(value);
  }
};

const transforms = {
  status(value) {
    return parseInt(value);
  }
};

class MyClass {
    constructor(props) {
        for(let key of keys) {
            if(!Object.prototype.hasOwnProperty.call(props, key)) {
              this[key] = defaults[key];
              continue;
            }
            if(typeof validators[key] === 'function' && !validators[key](props[key])) {
              this[key] = defaults[key];
              continue;
            }
            this[key] = typeof transforms[key] === 'function' ? transforms[key](props[key]) : props[key];
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы