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 相关文章推荐
JavaScript Eval 函数使用
Mar 23 Javascript
jquery dialog键盘事件代码
Aug 01 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
一个简单的js树形菜单
Dec 09 Javascript
JS使用getComputedStyle()方法获取CSS属性值
Apr 23 Javascript
jQuery实现下拉框选择图片功能实例
Aug 08 Javascript
JavaScript程序开发之JS代码放置的位置
Jan 15 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
Nov 12 jQuery
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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
How do I change MySQL timezone?
2008/03/26 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
php实现RSA加密类实例
2015/03/26 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
Python 如何对文件目录操作
2020/07/10 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
AJax面试题
2014/11/25 面试题
索桥的故事教学反思
2014/02/06 职场文书
社保转移委托书范本
2014/10/08 职场文书
廉洁自律证明
2015/06/24 职场文书
师德培训心得体会2016
2016/01/09 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python