JavaScript函数中关于valueOf和toString的理解

 更新时间:2016年06月14日 15:27:10   作者:jian,zhou  
本文给大家介绍JavaScript函数中关于valueOf和toString的理解,简单的说就是需要转换为字符串时,会调用toString,需要转换为数字时需要调用valueOf。对js valueof tostring知识感兴趣的朋友一起学习吧

今天看到一个试题,实现如下语法的功能:

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 Html实现移动端红包雨功能页面

    JavaScript Html实现移动端红包雨功能页面

    这篇文章主要为大家详细介绍了JavaScript Html实现移动端红包雨功能页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • layui点击按钮页面会自动刷新的解决方案

    layui点击按钮页面会自动刷新的解决方案

    今天小编就为大家分享一篇layui点击按钮页面会自动刷新的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • JavaScript创建一个object对象并操作对象属性的用法

    JavaScript创建一个object对象并操作对象属性的用法

    这篇文章主要介绍了JavaScript创建一个object对象并操作对象属性的用法,实例分析了javascript使用object类定义对象及属性的用法,需要的朋友可以参考下
    2015-03-03
  • JavaScript Ajax实现异步通信

    JavaScript Ajax实现异步通信

    这篇文章主要为大家详细介绍了JavaScript Ajax实现异步通信的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 老生常谈JavaScript面向对象基础与this指向问题

    老生常谈JavaScript面向对象基础与this指向问题

    下面小编就为大家带来一篇老生常谈JavaScript面向对象基础与this指向问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 原生JS 购物车及购物页面的cookie使用方法

    原生JS 购物车及购物页面的cookie使用方法

    下面小编就为大家带来一篇原生JS 购物车及购物页面的cookie使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • WebSocket连接频繁断开的问题及解决方案

    WebSocket连接频繁断开的问题及解决方案

    随着实时应用的普及,如在线聊天、实时数据监控和协作工具,WebSocket 成为了实现双向通信的重要技术,然而,在实际开发中,开发者常常会遇到 WebSocket 连接频繁断开的情况,本文将深入探讨 WebSocket 连接频繁断开的常见原因,并提供详细的解决方案和最佳实践
    2025-02-02
  • 微信小程序开发之大转盘 仿天猫超市抽奖实例

    微信小程序开发之大转盘 仿天猫超市抽奖实例

    本篇文章主要介绍了微信小程序开发之大转盘 仿天猫超市抽奖实例,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • JavaScript惰性加载的优化技巧详解

    JavaScript惰性加载的优化技巧详解

    这篇文章主要为大家详细介绍了JavaScript在进行惰性加载时的一些优化技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • JavaScript字符串中的replace方法用法示例

    JavaScript字符串中的replace方法用法示例

    在JavaScript中处理字符串是一项常见的任务,而去除字符串中的指定子字符串则是其中的一个重要操作,这篇文章主要给大家介绍了关于JavaScript字符串中replace方法的相关资料,需要的朋友可以参考下
    2025-04-04

最新评论