js函数--关于toString和valueOf

js函数--关于toString和valueOf

标签(空格分隔): JavaScript


今天看到一个试题,实现如下语法的功能:

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。

转载于:https://www.cnblogs.com/jianzhouf/p/5584044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值