开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7天,点击查看活动详情
上一次掘金的征文活动,准确来说,应该是去年的最后一次掘金官方的征文活动,我没有参加那一次征文活动。距离上一次征文,好像有两三个月了,感觉时间过得有点漫长了,都快要忘记掘金的征文活动了。
现在掘金推出了新的一年的征文活动-掘金日新计划 · 2 月更文挑战,又要开始新的一年,新的一轮的征文挑战了。
征文挑战已经开始了,而我即将要参与这次征文活动,参与挑战,挑战自己。
提升系列
提升系列,我主要是想写一些平时工作上面,自己会用到的一些好的技巧或者方法。当然,这些技巧和方法是针对我自己的。
除此之外,还可能会写一些解决难点的方法。比如,遇到了某个难点,要通过什么方法来解决它?
正如它的名字一样--提升,通过学习一些好的技巧、方法,或者解决一些难题、难点,来提升我们的能力。
出这个提升系列,一方面,是提升自己的开发能力;另一方面,也希望这个提升系列,可以帮助到部分人,提升他们的开发能力。
在这个系列里,我能想到的或者实现方法,不一定是最好的。欢迎大家一起来参与讨论,有好的想法也可以告诉我一下。
前言
在上一篇文章里,我们介绍了到momentjs的官网去下载momentjs的源码。momentjs的源码已经下载好了,接下来,我们就可以进行momentjs源码调试了。
实现
momentjs的代码下载好了,接下来就可以调试了。
我们先创建一个index.html文件,我们将在这个文件里进行代码调试。
调试之前,先查看一下momentjs的代码。我们用vscode打开moment.js文件,我们想要查看momentjs里的subtract方法是怎么实现的。我们直接在vscode里,搜索subtract即可。
有挺多搜索结果的,我们一个一个去查看。找了一会,就找到了subtract方法了。
var subtract = createAdder(-1, "subtract");
它是调用了createAdder方法,得到结果后赋值给subtract。调用createAdder方法时,传递了两个参数:-1和'subtract'。现在暂时不知道传递这两个参数的意义,我们查看一下createAdder方法,看下传递参数的作用是什么?
我们在vscode里面搜索一下createAdder方法,找了一会,找到了createAdder方法的定义:
function createAdder(direction, name) {
return function (val, period) {
var dur, tmp;
//invert the arguments, but complain about it
if (period !== null && !isNaN(+period)) {
deprecateSimple(
name,
"moment()." +
name +
"(period, number) is deprecated. Please use moment()." +
name +
"(number, period). " +
"See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."
);
tmp = val;
val = period;
period = tmp;
}
val = typeof val === "string" ? +val : val;
dur = createDuration(val, period);
addSubtract(this, dur, direction);
return this;
};
}
createAdder方法,对参数的命名是direction,name。
第一个参数从命名上面可以看出,它是控制方向的。而第二个参数作用是啥?
我们先看createAdder里面的逻辑,它是返回了一个匿名函数。匿名函数接收两个参数,这两个参数就是调用subtract方法时,传递的参数了。
我们继续看代码可以发现,如果我们调用momentjs的subtract方法时,传递第二个参数是数值时,会报错。提示该方法已经被废弃了,不建议使用。
继续往下面走,判断传递的第一个是不是字符串。如果是,把传入的参数转化为数值。
调用createDuration方法,结果赋值给dur。
最后是执行了addSubtract方法。
小结
本小节把momentjs的代码,拿过来进行调试。我们先分析了在createAdder方法里面的逻辑,接下来我们将会分析addSubtract方法的逻辑
最后,放上自己比较喜欢的一句诗句:
千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》