js实现对象完美克隆
生活随笔
收集整理的這篇文章主要介紹了
js实现对象完美克隆
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們知道,在js中,當object作為參數傳遞到函數中進行處理后,實際上是修改了傳入的對象本身(或者說是對象的引用),但很多時候我們并不希望函數去修改我們的這些對象參數,這就需要使用到對象的克隆,我們應該對該對象做一個克隆,然后操作這個克隆的對象,這樣就不會影響我們的原對象了。
????不過在js中并沒有對象克隆功能,因此需要我們自己實現,實現方法也不復雜其實,基本上是做一些屬性復制,我在網上找了一些,但有些實現并不好,如對于array對象克隆后就成json對象了,并沒有保留原來的數組方式。不過最后還是找到了一個很好的克隆函數,完美實現了js對象的克隆功能,不論是Array對象或者是普通的Object,都可以很好的進行克隆,這個函數使用constructor(函數構造器)進行復制。
具體代碼如下: Object.prototype.Clone?=?function(){
????var?objClone;
????if?(this.constructor?==?Object){
????????objClone?=?new?this.constructor();?
????}else{
????????objClone?=?new?this.constructor(this.valueOf());?
????}
????for(var?key?in?this){
????????if?(?objClone[key]?!=?this[key]?){?
????????????if?(?typeof(this[key])?==?'object'?){?
????????????????objClone[key]?=?this[key].Clone();
????????????}else{
????????????????objClone[key]?=?this[key];
????????????}
????????}
????}
????objClone.toString?=?this.toString;
????objClone.valueOf?=?this.valueOf;
????return?objClone;?
}?
????不過在js中并沒有對象克隆功能,因此需要我們自己實現,實現方法也不復雜其實,基本上是做一些屬性復制,我在網上找了一些,但有些實現并不好,如對于array對象克隆后就成json對象了,并沒有保留原來的數組方式。不過最后還是找到了一個很好的克隆函數,完美實現了js對象的克隆功能,不論是Array對象或者是普通的Object,都可以很好的進行克隆,這個函數使用constructor(函數構造器)進行復制。
具體代碼如下: Object.prototype.Clone?=?function(){
????var?objClone;
????if?(this.constructor?==?Object){
????????objClone?=?new?this.constructor();?
????}else{
????????objClone?=?new?this.constructor(this.valueOf());?
????}
????for(var?key?in?this){
????????if?(?objClone[key]?!=?this[key]?){?
????????????if?(?typeof(this[key])?==?'object'?){?
????????????????objClone[key]?=?this[key].Clone();
????????????}else{
????????????????objClone[key]?=?this[key];
????????????}
????????}
????}
????objClone.toString?=?this.toString;
????objClone.valueOf?=?this.valueOf;
????return?objClone;?
}?
總結
以上是生活随笔為你收集整理的js实现对象完美克隆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 或许是单选的飞鸽传书
- 下一篇: 飞鸽传书发现这个讲稿对现场