熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Javascript中淺拷貝與深拷貝的實現

2013-11-15 11:49:49  來源: JSP教程 

  javascript中的對像賦值 與 Java中是一樣的 都為引用傳遞
就是說在把一個對像賦值給一個變量時那麼這個變量所指向的仍就是原來對像的地址那怎麼來做呢 答案是 克隆

什麼是clone

在實際編程過程中我們常常要遇到這種情況有一個對象A在某一時刻A中已經包含了一些有效值此時可能會需要一個和A完全相同新對象B並且此後對B任何改動都不會影響到A中的值也就是說A與B是兩個獨立的對象但B的初始值是由A對象確定的在Java/javasript語言中用簡單的賦值語句是不能滿足這種需求的要滿足這種需求雖然有很多途徑但實現clone()方法是其中最簡單也是最高效的手段當然了 javascript語言中並沒有此方法

所以我特意寫了兩個克隆方法:一個為淺復制 一個為深復制
解釋:
淺復制(影子克隆):只復制對像的基本類型對像類型仍屬於原來的引用
深復制(深度克隆):不緊復制對象的基本類同時也復制原對象中的 對像就是說完全是新對象產生的

下面是代碼我己測試過了還沒遇到什麼問題 希望 大家感興趣的 一起參與
<!DOCTYPE HTML PUBLIC //WC//DTD HTML Transitional//EN>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta httpequiv=ContentType content=text/html; charset=gb>
<META NAME=Generator CONTENT=Wawa Editor >
<META NAME=Author CONTENT=八神奄>
<META NAME=Keywords CONTENT=javascriptJavaXMLXSLTASPVBScriptC#C++Database>
<META NAME=Description CONTENT=不及格的程序員無所不在>
</HEAD>

  <BODY>
<SCRIPT LANGUAGE=javascript>
<!

  function Objectprototypeclone(){
 var newObj = new Object();
 for(elements in this){
  newObj[elements] = this[elements];
 }
 return newObj;
}

  function ObjectprototypecloneAll(){
 function clonePrototype(){}
 clonePrototypeprototype = this;
 var obj = new clonePrototype();
 for(var ele in obj){
  if(typeof(obj[ele])==object) obj[ele] = obj[ele]cloneAll();
 }
 return obj;
}

  var obj   = new Object();
 objTeam   = First;
 objPowers   = new Array(IoriKyo);
 objmsg   = function(){alert()};
 objwinner   = new Object();
 objwinnername = objPowers[];
 objwinnerage  = ;
 objwinnerfrom = Japan

  var obj_clone   = objcloneAll();
 obj_cloneTeam   = Second;
 obj_clonePowers  = new Array(JimmyAnndy);
 obj_clonewinnername = obj_clonePowers[];
 obj_clonewinnerage = ;
 obj_clonewinnerfrom = USA;

  msg  = 界拳皇單打獨斗杯拳皇挑戰賽:  \n\n   A組 對戰形式:\n\n
 msg += objTeam+人員名單:+objPowers+\n;
 msg += 第一輪過後勝利者為:+objwinnername + 參賽者年齡:+objwinnerage+ 來自島國: +objwinnerfrom+\n;
 msg += \n\n   B組 對戰形式:\n\n
 msg += obj_cloneTeam+人員名單:+obj_clonePowers+\n;
 msg += 第一輪過後勝利者為:+obj_clonewinnername + 參賽者年齡:+obj_clonewinnerage+ 來自國際警察部隊: +obj_clonewinnerfrom+\n;
 alert(msg);

  //>
</SCRIPT>
</BODY>
</HTML>


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19698.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.