java script valueof_JavaScript函数中关于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

这个没有错的,可以完美解决问题。

优化:这里只讨论关于高阶函数的部分,对于更好的解决方案,可以实现无限这种调用,

//方法一

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);

需要转换为字符串时,会调用toString,需要转换为数字时需要调用valueOf。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值