JavaScript函数中关于valueOf和toString的理解


Posted in Javascript onJune 14, 2016

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

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。

Javascript 相关文章推荐
学习js所必须要知道的一些
Mar 07 Javascript
一个网马的tips实现分析
Nov 28 Javascript
intro.js 页面引导简单用法 分享
Aug 06 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
JS循环遍历JSON数据的方法
Jul 08 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
JS动态日期时间的获取方法
Sep 28 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
Oct 18 Javascript
基于JS实现web端录音与播放功能
Apr 17 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
Aug 01 Javascript
JavaScript实现随机点名小程序
Oct 29 Javascript
Jquery基础之事件操作详解
Jun 14 #Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 #Javascript
巧方法 JavaScript获取超链接的绝对URL地址
Jun 14 #Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 #Javascript
返回函数的JavaScript函数
Jun 14 #Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 #Javascript
Web程序员必备的7个JavaScript函数
Jun 14 #Javascript
You might like
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
PHPThumb图片处理实例
2014/05/03 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
JavaScript 大数据相加的问题
2011/08/03 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
高三毕业寄语
2014/04/10 职场文书
解除财产保全担保书
2014/05/20 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
公务员政审材料范文
2014/12/23 职场文书
九华山导游词
2015/02/03 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python