javascript 新方向 (2)
2019-01-26 本文已影响11人
zidea
在面向对象的语言世界里,语言都支持多态这个特性,同一个函数可以接受不同个数参数,执行不同的函数体。我们看看在 javascript 世界里是如何支持函数参数的。
我们写一个比较来获得最大值的方法,接受两个参数。没毛病。

如果我们突发奇想传入三个参数 1, 8 , 3 来调用这个函数,看一看效果,没毛病

其实在 javascript 函数中有一个隐藏变量 arguments 来包括函数。我们打印一下 arguments 看似是对象,属性为索引。

看上去很像数组,我们判断一下 arguments 是不是数组类型,结果让我们失望,arguments 并不是数组类型。

但是我们可以用遍历数组的方式来遍历 arguments 来查看每一个(调用函数的)参数。

好,虽然可能 arguments 不是数组,但是是不是 arguments 会有数组的一些特性,或者可能具有 reduce 方法。

结果 arguments 并不具有 reduce 方法。我们可以解决这个问题,我们将原有的参数的形式修改为接受一个解构变量。

这个解构变量...numbers 就是我们想要的数组类型。

那么我们就可以像使用数组那样来使用 numbers 。这样一来我们就可以改造一下函数。

如果我们想将数组作为 max 方法参数来调用函数,如果我们这样写来调用函数,是不是看上去不那么优雅,作为一个程序员,我们做什么事都要合理还要优雅,我们都是在一次一次重构中来追求优雅中进步和升华的。

这样来调用函数看起来就优雅,我们还是用解构,其实这个 es6 的新特性也是我个人比较喜欢一个特性。

写一个欢迎方法,呵呵打印所有参数,可能有人来看怎么都是简单的呢,其实一切都起源于简单,而终止复杂。

一下为一些解构的代码,不做过多解释想必大家一看就明白了。

