为了账号安全,请及时绑定邮箱和手机立即绑定

求问Js里面toString的一个妙用的原理

求问Js里面toString的一个妙用的原理

子衿沉夜 2018-10-11 14:14:07
function add(x){    var num = x;    function _add(para){        num+=para;        return _add;    }    _add.toString=function(){        return num;    }    return _add;}var a = add(1)(2)(3);console.log(a);//6console.log((a+7));//13console.log(a(11));//17如代码区这个时候a,它既可以是个变量,又可以当做是个函数名来直接调用,比如继续a(11);结果是17。toString方法我知道是复写了原型链上面的方法。可是为什么赋值的时候a会赋值到这个toString呢?
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

有一点你说的有点问题调用 a(11)的结果是一个函数,而不是结果17

console.log(typeof a(11))

// function

所以问题出在了console.log身上,console.log函数需要把变量转换成字符串打印,所以会首先调用变量的toString方法的,你把_add.toString换成_add.log再试试就不会自动打印出结果了,就会是函数了,除非再手动调用log


function add(x){

    var num = x;

    function _add(para){

        num+=para;

        return _add;

    }

    _add.log=function(){

        return num;

    }

    return _add;

}



var a = add(1)(2)(3);

console.log(a);

a.log()

补充一下案例 在执行a+7的时候 会自动调用toString 以下展示了这个情况

var a = function() {return 3}

a + 7

// "function () {return 3}7"

a.toString = function() {return 3}

a + 7

// 10


查看完整回答
反对 回复 2018-11-16
  • 1 回答
  • 0 关注
  • 627 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信