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 相关文章推荐
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
Js 中debug方式
Feb 07 Javascript
JavaScript 继承机制的实现(待续)
May 18 Javascript
JavaScript中的单引号和双引号报错的解决方法
Sep 01 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
js实现类似MSN提示的页面效果代码分享
Aug 24 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
Jan 10 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
微信小程序实现单选功能
Oct 30 Javascript
基于Vue实现微前端的示例代码
Apr 24 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
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出现web系统多域名登录失败的解决方法
2014/09/30 PHP
php多进程模拟并发事务产生的问题小结
2018/12/07 PHP
jquery json 实例代码
2010/12/02 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
python编程开发之日期操作实例分析
2015/11/13 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python 实现list或string按指定分段
2019/12/25 Python
Python实现ATM系统
2020/02/17 Python
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
培训讲师邀请函
2014/01/10 职场文书
学校交通安全责任书
2014/08/25 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Python 数据可视化之Bokeh详解
2021/11/02 Python
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python