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 相关文章推荐
解密效果
Jun 23 Javascript
JS中处理与当前时间间隔的函数代码
May 23 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
Jan 15 Javascript
jQuery中对节点进行操作的相关介绍
Apr 16 Javascript
一起学写js Calender日历控件
Apr 14 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
JS实现自动阅读单词(有道单词本添加功能)
Nov 14 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
在HTML文档中嵌入JavaScript的四种方法
May 07 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
Dec 13 Javascript
微信小程序图表插件wx-charts用法实例详解
May 20 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使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
python简单文本处理的方法
2015/07/10 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python监控进程脚本
2018/04/12 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
python3 线性回归验证方法
2019/07/09 Python
Python内存管理实例分析
2019/07/10 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
幼儿园教师节活动方案
2014/02/02 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2015员工年度考核评语
2015/03/25 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
vue动态绑定style样式
2022/04/20 Vue.js