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简单几行代码实现tab切换
Mar 10 Javascript
JavaScript设计模式经典之命令模式
Feb 24 Javascript
Vue原理剖析 实现双向绑定MVVM
May 03 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
更强大的vue ssr实现预取数据的方式
Jul 19 Javascript
p5.js绘制旋转的正方形
Oct 23 Javascript
JS forEach跳出循环2种实现方法
Jun 24 Javascript
封装Vue Element的table表格组件的示例详解
Aug 19 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
Terran剧情介绍
2020/03/14 星际争霸
德劲1104的电路分析与改良
2021/03/01 无线电
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
PHP中cookies使用指南
2007/03/16 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
深入php list()函数的详解
2013/06/05 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python rsa 加密解密
2017/03/20 Python
python求最大连续子数组的和
2018/07/07 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
体育专业个人的求职信范文
2013/09/21 职场文书
建筑自我鉴定
2013/10/19 职场文书
挂职思想汇报
2013/12/31 职场文书
财务人员担保书
2014/05/13 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
大学生学年个人总结
2015/02/15 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
团结主题班会
2015/08/13 职场文书
热爱劳动主题班会
2015/08/14 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
CentOS安装Nginx并部署vue
2022/04/12 Servers