Использование метода объекта в функции

173
19 октября 2018, 08:10

Задача - необходимо использовать данные методы в функции. Методы 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
    }
  }
}

Данный код не работает, буду благодарен за помощь в исправлении ошибки.

Answer 1

Эмммм, почему бы просто не создать класс?

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();

READ ALSO
tinyMCE удаляет первый слэш

tinyMCE удаляет первый слэш

Вызываю в функции вот так

146
Доп. условие на js

Доп. условие на js

День добрый! Подскажите, есть код

164
Не запускается gulp browser-sync

Не запускается gulp browser-sync

Вот делаю по оф докам

210