JavaScript高阶函数与valueOf/toString的联合应用
作者:函数茶馆时间:2026-10-30 09:07:15浏览:177
本文探讨JavaScript中通过高阶函数实现链式调用的技巧,如add(2)(3)(4)返回数值。重点解析利用valueOf和toString方法拦截隐式类型转换,使函数在参与运算或输出时自动返回累加结果,从而优化无限参数累加的解决方案。
高阶函数链式调用实现
近期遇到一个编程题目,要求实现特定的语法功能。
var a = add(2)(3)(4); //9
该需求属于高阶函数的典型应用场景。分析可知,调用add(2)会返回一个函数,继续调用add(2)(3)依然返回函数,而最终执行add(2)(3)(4)时则返回具体的数值结果。
具体的实现代码如下:
function add(num1){
return function(num2){
return function(num3){
return num1+num2+num3;
}
}
}
add(2)(3)(4);//9
上述代码逻辑正确,能够完美解决题目要求。
进一步优化:此处仅讨论高阶函数的相关部分,若追求更优解决方案,可实现支持无限参数调用的版本。
利用valueOf与toString优化
//方法一
function add(a) {
var temp = function(b) {
return add(a + b);
}
temp.valueOf = temp.toString = function() {
return a;
};
return temp;
}
add(2)(3)(4)(5);//14
//方法二、另看到一种很飘逸的写法(来自Gaubee):
function add(num){
num += ~~add;
add.num = num;
return add;
}
add.valueOf = add.toString = function(){return add.num};
var a= add(3)(4)(5)(6); // 18
//方法二注释:其实就相当于,只不过对函数应用了自定义属性,用于存储值。
;(function(){
var sum=0;
function add(num){
sum+=num;
return add;
}
add.valueOf=add.toString=function(){return sum;}
window.add=add;
})()
var a= add(3)(4)(5)(6); // 18[/code]
这是我在[url=http://www.cnblogs.com/wengxuesong/p/5577683.html]博客园[/url]看到的文章中写的,对于其中的方法一和方法二 一直不理解,也尝试在控制台输出 [code=javascript,javascript 代码,true]function 9
var temp = function() {
}
temp.valueOf = function() {
return 2;
}
temp.toString = function() {
return 'hahh';
}
alert(temp);
console.log(2 * temp);
在JavaScript中,当对象需要转换为字符串时会调用toString方法,而当需要转换为数字时则会调用valueOf方法。
作者最新文章
Object.assign合并JS对象的用法与注意事项
2026-11-05 17:56:08
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
