对象的克隆是oop中常用的一个方法,可是javascript的对象(各种数据类型都是)却没有提供一个clone方法。上次我实现了一个clone方法,可是一直有个小毛病,就是遇到"值类型"就晕菜了。你或许会觉得值类型也clone,搞笑吧?可是javascript动态类型语言,其实你在调用时可能更本不知道它是什么类型,能克隆"值类型"将会使代码具有很好的兼容性。
当然由于我们可以使用typeof方法获取对象的基本类型,然后一个switch,该干嘛干嘛不就搞定了吗?这个... 我希望我的clone能不去判断每种具体的类型,而尽量使用javascript语言提供的机制来完成,这也是上次那个clone方法不能clone值类型的原因。
昨天麻袋同学给出了一个很棒的解决值类型clone问题的方法,使用代码:
objclone = new this.constructor(this.valueof());
代替我原来的:
objclone = new this.constructor();
这样一来值类型clone的问题迎刃而解,原理(麻袋解释的):
对于 date, boolean, number 这三种基本的数据类型,执行
var objclone = new this.constructor();
的时候,得到的是默认值。而真实的值又没有属性可引用到,所以,只能在初始化的时候,以参数形式赋默认值。
var objclone = new this.constructor(this.valueof());
不过后来麻袋发现它的代码处理object的时候有问题,于是给出了:
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/