游客:
注册
|
登录
|
会员
|
搜索
|
统计
|
帮助
无忧脚本
»
JavaScript & VBScript & DHTML 脚本技术讨论版
» 有关valueOf跟toString
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[讨论]
有关valueOf跟toString
民工精髓
大恐龙
UID 66672
精华 0
积分 529
帖子 153
威望 158
阅读权限 50
注册 2007-3-21
状态 离线
#1
大
中
小
使用道具
发表于 2008-8-5 19:44
资料
个人空间
短消息
加为好友
有关valueOf跟toString
刚才翻帖子,看到有人提到对于这两个东西有疑问,举个简单例子:
假设在古代,一两黄金换20两白银,一两白银换25枚铜钱,构建描述货币的类:
<script> function Money(gold, silver, coin) { this.gold = gold; this.silver = silver; this.coin = coin; } Money.parse = function(value) { var coin = parseInt(value % 25); var silver = parseInt(value / 25 % 20); var gold = parseInt(value / 500); return new Money(gold, silver, coin); } Money.prototype.valueOf = function() { return ((this.gold * 20) + this.silver) * 25 + this.coin; } Money.prototype.toString = function() { return this.gold + "两黄金," + this.silver + "两白银," + this.coin + "文钱"; } var money1 = new Money(5, 6, 1); var money2 = new Money(2, 4, 6); var money3 = Money.parse(money1 + money2); alert(money3); </script>
提示:您可以先修改部分代码再运行
运行一下,可以看到结果。
这里隐式调用了valueOf跟toString,二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。比如
money1 + money2,调用的就是两者valueOf之后的值相加,而alert的时候,把money3先toString了一下。
这个例子其实是模仿js内置对象Date的,Date基本上也是这样处理问题的。
技术是一种气质
los
霸王龙
UID 81082
精华 0
积分 2527
帖子 966
威望 865
阅读权限 70
注册 2007-12-28
状态 离线
#2
大
中
小
使用道具
发表于 2008-8-5 20:34
资料
个人空间
短消息
加为好友
很好的例子
回到以前自由自在的生活中~~~
los
霸王龙
UID 81082
精华 0
积分 2527
帖子 966
威望 865
阅读权限 70
注册 2007-12-28
状态 离线
#3
大
中
小
使用道具
发表于 2008-8-5 20:40
资料
个人空间
短消息
加为好友
<script> function Money(n) { this.n = n; } Money.prototype.valueOf = function() { return this.n * 2 } Money.prototype.toString = function() { return this.n * 3 } var m1 = new Money(1); var m2 = new Money(2); m = m1 + m2 alert(m1); alert(m2); alert(m); </script>
提示:您可以先修改部分代码再运行
回到以前自由自在的生活中~~~
yangfion171
大恐龙
UID 83468
精华 0
积分 952
帖子 353
威望 337
阅读权限 50
注册 2008-3-4
状态 离线
#4
大
中
小
使用道具
发表于 2008-8-5 21:05
资料
个人空间
短消息
加为好友
呵呵,有趣
通俗意懂的例子
<script> var obj = {}; obj.valueOf = function() { return 10; } obj.toString = function() { return "return value"; } var result = obj + 1; //var result = obj.valueOf() + 1; alert(result); alert(obj); //alert(obj.toString()); </script>
提示:您可以先修改部分代码再运行
不要问我为什么这么写
kuku_john
霸王龙
UID 51166
精华 0
积分 2214
帖子 970
威望 991
阅读权限 70
注册 2006-5-4
状态 离线
#5
大
中
小
使用道具
发表于 2008-8-6 08:11
资料
个人空间
短消息
加为好友
很好很强大
学习了!
wangjianbo
(星期六的黄昏)
大恐龙
UID 79170
精华 0
积分 939
帖子 441
威望 433
阅读权限 50
注册 2007-11-20
状态 离线
#6
大
中
小
使用道具
发表于 2008-8-6 09:52
资料
个人空间
短消息
加为好友
这个帖子太及时了,感觉就是专门给我写的
投票
交易
悬赏
活动
最近访问的论坛 ...
Html & XHtml & CSS 网页制作讨论版
原创文章 & 讨论汇总版
经典代码、教程资源库
休闲留言板
Flex & Flash 技术讨论版
ASP & Access & SQL Server 后台编程讨论版
无忧脚本
无忧脚本技术讨论区
> 原创文章 & 讨论汇总版
> Html & XHtml & CSS 网页制作讨论版
> JavaScript & VBScript & DHTML 脚本技术讨论版
> XML & XSL & XPath & VML 网页技术讨论版
> ASP & Access & SQL Server 后台编程讨论版
> PHP & MySQL 后台编程讨论版
> JSP & Java & J2SE 后台编程讨论版
> .Net 相关技术讨论版
> Web 服务器技术
> Flex & Flash 技术讨论版
> Web UI & 图形技术讨论版
无忧脚本资源服务区
> 经典代码、教程资源库
> 参考手册、常用软件资源库
> 无忧合租服务器讨论版
无忧脚本休闲区
> 休闲留言板
> 招聘求职、网站推荐、广告信息版
> 无忧站务管理版
> 垃圾帖回收站
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
当前时区 GMT+8, 现在时间是 2010-7-31 04:42
苏ICP备05080427号
Powered by
Discuz!
5.5.0
© 2001-2007
51JS.COM
Processed in 0.200665 second(s), 8 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
无忧脚本
-
Archiver