这篇文章主要介绍了 js 实现类似于 add(1)(2)(3) 调用方式的方法, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
- var add = function(a){
- return function(b){
- return function(c){
- return a+b+c;
- };
- };
- };
- add(1)(2)(3); //6
没错!那要是 add(1)(2)(3)(4) 这样 4 个调用呢, 那这个肯定不适用了。
这种就是类似于执行一个函数返回函数自身值:
- function add(x) {
- var sum = x;
- var tmp = function (y) {
- sum = sum + y;
- return tmp;
- };
- tmp.toString = function () {
- return sum;
- };
- return tmp;
- }
- console.log(add(1)(2)(3)); //6
- console.log(add(1)(2)(3)(4)); //10
但是在计算完成后还是返回了 tmp 这个函数,这样就获取不到计算的结果了,我们需要的结果是一个计算的数字那么怎么办呢,首先要知道 JavaScript 中,打印和相加计算,会分别调用 toString 或 valueOf 函数,所以我们重写 tmp 的 toString 和 valueOf 方法,返回 sum 的值;
来源: