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 相关文章推荐
用于自动添加Digg This!按钮的JavaScript
Dec 23 Javascript
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
AngularJS ng-bind-html 指令详解及实例代码
Jul 30 Javascript
利用Angularjs和bootstrap实现购物车功能
Aug 31 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
编写一个javascript元循环求值器的方法
Apr 14 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
linux命令之调试工具strace的深入分析
2013/06/03 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python登录豆瓣并发帖的方法
2015/07/08 Python
python递归全排列实现方法
2018/08/18 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
python安装sklearn模块的方法详解
2020/11/28 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
物业电工岗位职责
2013/11/20 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
运动会通讯稿300字
2014/02/02 职场文书
六查六看心得体会
2014/10/14 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
实习单位鉴定意见
2015/06/04 职场文书