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 相关文章推荐
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
JS获取地址栏参数的小例子
Aug 23 Javascript
获取select元素被选中的文本内容的js代码
Jan 29 Javascript
js的window.showModalDialog及window.open用法实例分析
Jan 29 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
深入了解JavaScript词法作用域
Jul 29 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
用php解析html的实现代码
2011/08/08 PHP
PHP实现今天是星期几的几种写法
2013/09/26 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
使用PHP开发留言板功能
2019/11/19 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
js取得url地址参数实例
2013/02/22 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
清除输入框内的空格
2016/12/21 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
编写简单的Python程序来判断文本的语种
2015/04/07 Python
python 自动去除空行的实例
2018/07/24 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
python import 上级目录的导入
2020/11/03 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
总经理驾驶员岗位职责
2013/12/04 职场文书
小学毕业感言150字
2014/02/05 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
党支部公开承诺书
2014/03/28 职场文书
医学专业大学生求职信
2014/07/12 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python