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 相关文章推荐
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
js判断字符长度以及中英文数字等
Dec 31 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
JavaScript事件对象event用法分析
Jul 27 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读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python实现的简单猜数字游戏
2015/04/04 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python实现邮件发送功能
2019/08/10 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
员工评语大全
2014/01/19 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
民事起诉状范文
2015/05/19 职场文书
我的长征观后感
2015/06/09 职场文书
关于公司年会的开幕词
2016/03/04 职场文书