js對象的複製

來源:互聯網
上載者:User

最近用到一個web ui外掛程式,不過他的調用時全域變數,

也就是說一個頁面只能用一次,這個外掛程式挺好用的只是我的頁面需要2個以上

這樣的外掛程式,所以我想到了js對象的複製。

思路:複製一個對象(不是引用,引用還是同一個對象),然後

把新的對象的關鍵屬性(比如id)改改,這樣就變成了2個不同的對象。

我可以在頁面對這2個對象進行改動而互不影響。

遺憾的是js沒有現成的clone方法,需要自己寫。

網上也有人寫過這樣的方法,不過會有問題,因為要遞迴。

而我試了一下,真的出了問題,根本不能用。

不過jquery的extend可以實現,這個經過實際測試,所以今天記錄下來。

  // 淺層複製(只複製頂層的非 object 元素)
  //var newObject = jQuery.extend({}, oldObject);

  // 深層複製(一層一層往下複製直到最底層)
  //var newObject = jQuery.extend(true, {}, oldObject);

 

 

function clone(o) {if (!o) {return o;} else {var c;if (Object.prototype.toString.apply(o) === '[object Array]') {c = [];for (var i = 0; i < o.length; i++) {c.push(clone(o[i]));}                 // 採用這種判斷,而非typeof(o) === 'object',這裡只處理Object,                 //而不處理其他包括Array、String、Date、Function等,但由new建立的Function對象的也是Object                            } else if (Object.prototype.toString.call(o) === '[object Object]') {c = {};for (var p in o) {c[p] = clone(o[p]);}} else {return o;}                return c;       }}function clonedd(myObj){  if(typeof(myObj) != 'object') return myObj;  if(myObj == null) return myObj;    var myNewObj = new Object();    for(var i in myObj)     myNewObj[i] = clonedd(myObj[i]);    return myNewObj;}function myclone(obj){var arr1 =  new Array();arr1.push(obj);var arr2 = [].concat(arr1);var res=arr2[0];return res;}// 淺層複製(只複製頂層的非 object 元素)//var newObject = jQuery.extend({}, oldObject);// 深層複製(一層一層往下複製直到最底層)//var newObject = jQuery.extend(true, {}, oldObject);

 

下面是我使用全域變數navTab,

複製這個變數得到a,再改變它的一個屬性id,ok完成複製。

$(function(){navTab.init({id:"navTab"});var a = jQuery.extend(true, {}, navTab);a.init({id:"navTab2"});});

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.