Javascript练习解决方案.为什么一个比另一个好
Javascript exercism solution. Why is one better than the other?
我用这个解决方案解决了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()有区别吗?
魔兽世界!在第一个代码中:
- beginAtStartOfDay是在全局范围内创建的
- gigasecondConverter是在全局范围内创建的
- 然后在吉秒转换器中返回beginAtStartOfDay
好的,现在让我来解释一下你记忆力差的原因:D。beginAtStartOfDay存储在全局作用域中,然后您在千兆秒转换器中使用它,因此他在gigasecondConverter作用域中创建了另一个beginAtStartOfDay,这会浪费内存。
但最大的内存浪费是EACH您要调用的时间gigasecondConverter您将创建beginAtStartOfDay的NEW实例。想象一下,仅仅使用千兆秒转换器100次和99次就浪费了内存!内存不足:D
在第二个中:
- Gigasecond是在全局范围内创建的
- 日期是在Gigasecond的原型中创建的
- _beginningOfTheDay是在Gigasecond的原型中创建的
现在EACH每次您要调用Gigasecond时,它将只创建_beginningOfTheDay的一个实例,即使您调用了100次,它也将始终调用Gigasecond的
SAME原型函数。
JavaScript中的原型非常强大!将它用于一个将要调用并返回多次的函数对你的记忆力来说总是一件好事:)
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 使用clickToggle并在单击另一个元素时关闭元素
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 无法从jquery Mobile导航栏重定向到另一个页面
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 导航到特定事件的另一个变量页面
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 如何在react js中将值从一个组件发送到另一个组件
- 按我自己的类克隆另一个元素的内容和顺序
- 在另一个函数中使用变量this
- 如何在react js中从一个页面导航到另一个页面
- 在另一个函数成功结束后调用该函数
- 要求定义另一个文件中的对象