Есть фрагмент кода с созданием объекта.
const time = {
date: new Date(),
hours: this.date.getHours(),
};
В консоли получаю ошибку
Uncaught TypeError: Cannot read property ‘getHours’ of undefined
Почему так происходит? Что я не учитываю?
На стадии выполнения и резолва объекта this еще не будет ссылаться на объект, поэтому и ошибка.
так будет работать:
const date = new Date(); const time = { date: date, hours: date.getHours() };
в общем-то про this
правильно сказали в предыдущем комментарии. с минимальными изменениями исходный пример я бы написал с геттером:
const time = {
date: new Date(),
get hours() {
return this.date.getHours();
}
};
console.log(time.date); // 2019-05-24T09:22:38.018Z
console.log(time.hours); // 12
таким образом условный “api” работы с объектом не поламается, по прежнему можно через точно получить date и hours, но будет работать правильно. а вообще для чего-то более сложного лучше использовать классы.
4 лайка
Как вариант
const time = {
hours: new Date().getHours()
};
Это я понимаю. Просто дальше будет min: new Date().getMinutes(), seconds: new Date().getSeconds()… и уже не очень чисто получается.
Вот, это именно то, что нужно. Огромное спасибо)
Да через геттеры более лаконично и красивее. Только возможность перегрузки методов исчезает, если такое нужно будет.