javascript - 求问Js里面toString的一个妙用的原理
本文介绍了javascript - 求问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呢?
解决方案
有一点你说的有点问题调用 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
这篇关于javascript - 求问Js里面toString的一个妙用的原理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文