Непонятный NaN в js [дубликат]

150
02 августа 2018, 12:20

На данный вопрос уже ответили:

  • Настройки игрового поля “Сапер” 1 ответ

есть следующий код на js

var AllDate = { 
	curdate: new Date(), 
	begining: new Date ("2018-06-23T00:00:00.000"), 
	deferense: function () { 
		return Math.trunc((this.curdate - this.begining)/1000/60/60/24); 
	}(), 
};

Но по итогу мы имеем AllDate.deferense = NaN;

Как это исправить?

Answer 1
function () {
    return Math.trunc((this.curdate - this.begining)/1000/60/60/24);
}()

Это самовызывающаяся анонимная функция, которая никакого отношения к контексту объекта во время выполнения иметь не будет. Лучше всего в данном случае использовать геттер

var AllDate = {
  curdate: new Date(),
  begining: new Date ("2018-06-23T00:00:00.000"),
  get deferense() {
    return Math.trunc((this.curdate - this.begining)/1000/60/60/24);
  },
};
console.log(AllDate.deferense)
Answer 2

У Вас метод deferense запускается тогда, когда еще объект не создался. Как вариант можете это действие разделить на две части или вызвать с помощью call с передачей объекта в виде контекста.

var AllDate = { 
  curdate: new Date(), 
  begining: new Date("2018-06-23T00:00:00.000"), 
  deferense: function() { 
    //console.log(this); 
    return Math.trunc((this.curdate - this.begining) / 1000 / 60 / 60 / 24); 
  }.call(AllDate), 
}; 
console.log(AllDate);

READ ALSO
Как лучше реализовать модуль в js?

Как лучше реализовать модуль в js?

Задумался вот о чём: на сайтах по js написано, что лучше всего реализовывать модуль через такой приём:

132
Проблема с API в Google Chrome

Проблема с API в Google Chrome

При запросе на API не могу получить размер ответа

145
Как добавить сумму элементов из двух массивов в третий? Внутри объекта

Как добавить сумму элементов из двух массивов в третий? Внутри объекта

Почему значения элементов в массиве finalPay имеют значение NAN? Как добавить сумму элементов массивов billValues и allTips в массив finalPay?

136
Нужна помощь по выводу маркеров на google.maps

Нужна помощь по выводу маркеров на google.maps

Надо доделать часть, где берётся некое значение и проверяется на сервере нет ли пользователей с такими же id, и выводить их на googlemaps как маркеры

153