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的更多相关文章

  1. JS中的toString()和valueOf()方法

    1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...

  2. js中的toString和valueOf

    数据的转换 基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题 所有对象继承了两个转换方法: 第一个是toStri ...

  3. 10分钟搞懂toString和valueOf函数(详细版)

    首先要说明的是这两种方法是toPrimitive抽象操作里会经常用到的. 默认情况下,执行这个抽象操作时会先执行valueOf方法,如果返回的不是原始值,会继续执行toString方法,如果返回的还不 ...

  4. 一日一练-JS toString 和valueOf 方法的联系与区别

    子曰:类型转换中toString 和valueOf 的联系与区别分析 首先是看看ES5 的规范是如何进行说明的 在这里有几个基础知识点需要了解一下: [[Class]] [[Class]] 属于Obj ...

  5. js中toString和valueOf方法的区别

    toString 方法 返回对象的字符串表示形式. 语法:objectname.toString([radix]) objectname 必需.要为其搜索字符串表示形式的对象. radix 可选.为将 ...

  6. javascript之toString()和valueOf()函数

    1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名 ...

  7. api日常总结:前端常用js函数和CSS常用技巧

    我的移动端media html{font-size:10px} @media screen and (min-width:321px) and (max-width:375px){html{font- ...

  8. js函数的属性和方法

    js函数的属性和方法 前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解j ...

  9. 关于toString()和valueOf()以及Object.prototype.toString.call()的结合理解

    一.先说说String(): String()是全局函数,把对象的值转换为字符串. 语法:String(obj); 任何值(对象)都有String()方法,执行过程是这样的:首先,如果该对象上有toS ...

随机推荐

  1. Java NIO API详解

    在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端 ...

  2. struts2框架通过jQuery实现AJAX应用

    众所周知,在web2.0时代,哪个web框架要是不跟AJAX沾点边,都不好意思说自己的框架有多么多么NB,当然struts也不例外,从 struts1开始到现在的struts2也都对AJAX有支持.A ...

  3. RC隔离 更新where条件列 没有索引的情况

    CREATE TABLE `test100` ( `sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号', `phoneNo` int(11) , `c ...

  4. 【HDOJ】2757 Ocean Currents

    简单BFS. /* 2757 */ #include <iostream> #include <queue> #include <cstdio> #include ...

  5. 【HDOJ】2425 Hiking Trip

    优先级队列+BFS. #include <iostream> #include <cstdio> #include <cstring> #include <q ...

  6. C++ Primer 随笔 Chapter 13 复制控制

    1.复制控制包含的内容:复制构造函数.赋值操作符.析构函数 2.复制构造函数: a. 定义:只有单个形参,而且该形参是对本类类型的引用,这样的构造函数被成为复制构造函数 b. 适用情况: (1)根据一 ...

  7. POJ 2594 Treasure Exploration(带交叉路的最小路径覆盖)

    题意:  派机器人去火星寻宝,给出一个无环的有向图,机器人可以降落在任何一个点上,再沿着路去其他点探索,我们的任务是计算至少派多少机器人就可以访问到所有的点.有的点可以重复去. 输入数据: 首先是n和 ...

  8. 【贪心】Codeforces 704B & 705D Ant Man

    题目链接: http://codeforces.com/problemset/problem/704/B 题目大意: 给N个点,起点S终点T,每个点有X,A,B,C,D,根据I和J的X坐标可得I到J的 ...

  9. Xshell中文编码的设置

    一直用的是SSH Secure Shell Client,关于中文乱码,一直找不到简便的解决方案,后来改用XShell,编码设置如下: 1.查看linux系统编码,linux命令: locale. 2 ...

  10. 【OSGi】OSGi生命周期

    1 生命周期管理 对于非模块化应用,生命周期将应用作为一个整体来操作: 而对于模块化应用,则可以以细粒度的方式来管理应用的某一个独立部分. OSGi生命周期管理 OSGi生命周期层有两种不同的作用: ...