js函数--关于toString和valueOf
js函数--关于toString和valueOf
标签(空格分隔): JavaScript
今天看到一个试题,实现如下语法的功能:
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。
js函数--关于toString和valueOf的更多相关文章
- JS中的toString()和valueOf()方法
1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...
- js中的toString和valueOf
数据的转换 基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题 所有对象继承了两个转换方法: 第一个是toStri ...
- 10分钟搞懂toString和valueOf函数(详细版)
首先要说明的是这两种方法是toPrimitive抽象操作里会经常用到的. 默认情况下,执行这个抽象操作时会先执行valueOf方法,如果返回的不是原始值,会继续执行toString方法,如果返回的还不 ...
- 一日一练-JS toString 和valueOf 方法的联系与区别
子曰:类型转换中toString 和valueOf 的联系与区别分析 首先是看看ES5 的规范是如何进行说明的 在这里有几个基础知识点需要了解一下: [[Class]] [[Class]] 属于Obj ...
- js中toString和valueOf方法的区别
toString 方法 返回对象的字符串表示形式. 语法:objectname.toString([radix]) objectname 必需.要为其搜索字符串表示形式的对象. radix 可选.为将 ...
- javascript之toString()和valueOf()函数
1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名 ...
- api日常总结:前端常用js函数和CSS常用技巧
我的移动端media html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font- ...
- js函数的属性和方法
js函数的属性和方法 前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解j ...
- 关于toString()和valueOf()以及Object.prototype.toString.call()的结合理解
一.先说说String(): String()是全局函数,把对象的值转换为字符串. 语法:String(obj); 任何值(对象)都有String()方法,执行过程是这样的:首先,如果该对象上有toS ...
随机推荐
- Spring的OpenEntityManagerInViewFilter
在Java Web项目中使用Hibernate经常会遇到LazyInitializationException .这是因为controller和model层(java代码)将通过JPA的一些启用了延迟 ...
- Struts2接收checkbox的值
Struts2接收checkbox的值: HTML: <input type="checkbox" name="ssl" value="B1 ...
- 把CSV文件导入到SQL Server表中
保存数据库数据直接查询select * from tableName 在数据表格的左上角右击——将结果另存为选择路劲保存好的就是.csv格式的数据 有时候我们可能会把CSV中的数据导入到某个数据库的表 ...
- XFS:大数据环境下Linux文件系统的未来?
XFS:大数据环境下Linux文件系统的未来? XFS开发者Dave Chinner近日声称,他认为更多的用户应当考虑XFS.XFS经常被认为是适合拥有海量数据的用户的文件系统,在空间分配方面的可 ...
- COJ 3007 Mr.Yang的小助手
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1037 试题描述: 信息学社团已经逐渐发展壮大,成员也越来越多.现在,有n个 ...
- GitHub的5人骨干小组:早期初创公司该如何招到正确的人
转自:http://news.cnblogs.com/n/190924/ 前 5 年对初创公司来说至关重要,根据美国中小企业发展署的数据,大约 1/4 的初创公司在第一年内关门大吉,只有不到一半的企业 ...
- (转载)提高mysql插入数据的速度
(转载)http://blog.csdn.net/bhq2010/article/details/7376352 需要在mysql中插入2000万条记录,用insert语句插入速度很有限,每秒钟几百条 ...
- 数据结构:HDU 2993 MAX Average Problem
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Marzoni(玛佐尼)意大利顶级西服面料之一_HollandandSherry_新浪博客
Marzoni(玛佐尼)意大利顶级西服面料之一_HollandandSherry_新浪博客 Marzoni(玛佐尼)意大利顶级西服面料之一 (2013-01-08 17:30:04) 转载▼
- 用过coreData或者sqlite吗?读写是分线程的吗?
文/natewang(简书作者)原文链接:http://www.jianshu.com/p/cb8dc61b12fa著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 如果不是要求特别高, ...