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

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

console.log((a+7));//13

console.log(a(11));//17

如代码区这个时候a,它既可以是个变量,又可以当做是个函数名来直接调用,比如继续a(11);结果是17。
toString方法我知道是复写了原型链上面的方法。
可是为什么赋值的时候a会赋值到这个toString呢?

子衿沉夜
浏览 628回答 1
1回答

繁星淼淼

有一点你说的有点问题调用 a(11)的结果是一个函数,而不是结果17console.log(typeof a(11))// function所以问题出在了console.log身上,console.log函数需要把变量转换成字符串打印,所以会首先调用变量的toString方法的,你把_add.toString换成_add.log再试试就不会自动打印出结果了,就会是函数了,除非再手动调用logfunction 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript