Javascript练习解决方案.为什么一个比另一个好

Javascript exercism solution. Why is one better than the other?

本文关键字:一个 另一个 练习 解决方案 为什么 Javascript      更新时间:2023-09-26

我用这个解决方案解决了Javascript中的Gigasecond练习。我想知道我本可以做得更好:

var gigasecondConverter = function(unformattedDate) {
  this.date = function() {
    return beginAtStartOfDay(Number(unformattedDate) + 1000000000000)
  }
}
beginAtStartOfDay = function(number) {
  date = new Date(number)
  date.setSeconds(0);
  date.setMinutes(0);
  date.setHours(0);
  return date;
}
module.exports = gigasecondConverter

为什么这个解决方案更好?

(function() {
  'use strict';
  function Gigasecond(birthDate) {
    this.birthDate = birthDate;
    this.interval = 1000000000000;
  };
  Gigasecond.prototype.date = function() {
    var gigasecondCelebrationDate = new Date(this.birthDate.getTime() + this.interval);
    return this._beginningOfTheDay(gigasecondCelebrationDate);
  };
  Gigasecond.prototype._beginningOfTheDay = function(date) {
    date.setSeconds(0);
    date.setMinutes(0);
    date.setHours(0);
    return date;
  };
  module.exports = Gigasecond;
})();

为什么自执行函数和原型的使用比直接在函数上定义日期方法更好?另外,使用Number和getTime()有区别吗?

魔兽世界!在第一个代码中:

  1. beginAtStartOfDay是在全局范围内创建的
  2. gigasecondConverter是在全局范围内创建的
  3. 然后在吉秒转换器中返回beginAtStartOfDay

好的,现在让我来解释一下你记忆力差的原因:D。beginAtStartOfDay存储在全局作用域中,然后您在千兆秒转换器中使用它,因此他在gigasecondConverter作用域中创建了另一个beginAtStartOfDay,这会浪费内存。

最大的内存浪费EACH您要调用的时间gigasecondConverter您将创建beginAtStartOfDayNEW实例。想象一下,仅仅使用千兆秒转换器100次和99次就浪费了内存!内存不足:D

第二个中:

  1. Gigasecond是在全局范围内创建的
  2. 日期是在Gigasecond原型中创建的
  3. _beginningOfTheDay是在Gigasecond原型中创建的

现在EACH每次您要调用Gigasecond时,它将只创建_beginningOfTheDay一个实例,即使您调用了100次,它也将始终调用Gigasecond
SAME原型函数。

JavaScript中的原型非常强大!将它用于一个将要调用并返回多次的函数对你的记忆力来说总是一件好事:)