• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Javascript中淺拷貝與深拷貝的實現

    發表于:2007-06-21來源:作者:點擊數: 標簽:
    javascript中的對像賦值 與 Java 中是一樣的 ,都為引用傳遞. 就是說,在把一個對像賦值給一個變量時,那么這個變量所指向的仍就是原來對像的地址.那怎么來做呢 答案是 克隆. 什么是"clone"? 在實際編程過程中,我們常常要遇到這種情況:有一個對象A,在某一時

       

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

    什么是"clone"?

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

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

    下面是代碼,我己測試過了,還沒遇到什么問題 ,希望 大家感興趣的 一起參與.
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META NAME="Generator" CONTENT="Wawa Editor 1.0">
    <META NAME="Author" CONTENT="八神奄">
    <META NAME="Keywords" CONTENT="javascript,Java,XML,XSLT,ASP,VBScript,ASP .net,C#,C++,Database">
    <META NAME="Description" CONTENT="不及格的程序員,無所不在">
    </HEAD>


    <BODY>
    <SCRIPT LANGUAGE="javascript">
    <!--


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


    function Object.prototype.cloneAll(){
     function clonePrototype(){}
     clonePrototype.prototype = this;
     var obj = new clonePrototype();
     for(var ele in obj){
      if(typeof(obj[ele])=="object") obj[ele] = obj[ele].cloneAll();
     }
     return obj;
    }


     var obj1   = new Object();
     obj1.Team   = "First";
     obj1.Powers   = new Array("Iori","Kyo");
     obj1.msg   = function(){alert()};
     obj1.winner   = new Object();
     obj1.winner.name = obj1.Powers[0];
     obj1.winner.age  = 23;
     obj1.winner.from = "Japan"


     var obj1_clone   = obj1.cloneAll();
     obj1_clone.Team   = "Second";
     obj1_clone.Powers  = new Array("Jimmy","Anndy");
     obj1_clone.winner.name = obj1_clone.Powers[1];
     obj1_clone.winner.age = 22;
     obj1_clone.winner.from = "USA";


     msg  = "2003界拳皇單打獨斗杯,拳皇挑戰賽:  \n\n   A組 對戰形式:\n\n"
     msg += obj1.Team+" 組 ,人員名單:"+obj1.Powers+"\n";
     msg += "第一輪過后,勝利者為:"+obj1.winner.name +" ,參賽者年齡:"+obj1.winner.age+" ,來自島國: "+obj1.winner.from+"\n";
     msg += "\n\n   B組 對戰形式:\n\n"
     msg += obj1_clone.Team+" 組 ,人員名單:"+obj1_clone.Powers+"\n";
     msg += "第一輪過后,勝利者為:"+obj1_clone.winner.name +" ,參賽者年齡:"+obj1_clone.winner.age+" ,來自國際警察部隊: "+obj1_clone.winner.from+"\n";
     alert(msg);


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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>