Задача - необходимо использовать данные методы в функции. Методы addYear()
и show()
, соответственно, добавляют к текущей дате год и выводят ее на экран. Подход ниже позволяет использовать данные методы только с фиксированным значением (здесь - с текущей датой). Возможно применение методов подряд (чейнинг), как например: plusYear.addYear().addYear().show()
.
var plusYear = {
time: Date.now(),
addYear: function() {
this.time = this.time + 31557600000
return this
},
show: function() {
console.log(new Date(this.time))
return this
}
}
Необходимо сделать так, чтобы time
можно было передавать как аргумент функции, то есть необходимо обернуть все эти методы в одну функцию (с сохранением возможности чейнинга). Считается, что в качестве аргумента всегда передается корректное значение в миллисекундах.
function plusYearAndShow(num) {
var plusYear = {
time: num,
addYear: function() {
this.time = this.time + 31557600000
return this
},
show: function() {
console.log(new Date(this.time))
return this
}
}
}
Данный код не работает, буду благодарен за помощь в исправлении ошибки.
Эмммм, почему бы просто не создать класс?
class PlusYear {
constructor(initialTime = Date.now()) {
this.time = initialTime;
}
addYear() {
this.time = this.time + 31557600000
return this
}
show() {
console.log(new Date(this.time))
return this
}
}
const plusYear = new PlusYear();
const plusYear2 = new PlusYear(+new Date('2017'));
plusYear.addYear().addYear().show();
plusYear2.addYear().addYear().show();
В вашем же случае, код не работает, потому что вы не возвращаете объект, поэтому и никакого chaining
не возможно
Вариант с функцией:
// просто возвращаем объект
const plusYearAndShow = num => ({
time: num,
addYear: function() {
this.time = this.time + 31557600000
return this
},
show: function() {
console.log(new Date(this.time))
return this
}
});
const plusYear = plusYearAndShow(+ new Date('2017'));
plusYear.addYear().addYear().show();