close

複製物件看起來是一個很簡單的操作,但是在之前打算複製一個物件時卻意外的碰上了困難。

如果像其它程式語言一樣,先設定一個全域變數,然後在function裡定義另一個變數,並用等號把全域變數的內容指定給新變數的話....

var item1 = {
    i1: 'aaa',
    i2: 'bbb',
    i3: 'ccc'
};

function copy1() {
    var item2 = new Object();
    
    item2=item1;

}

看起來像是把item1的內容複製給了item2...但是這樣是錯的!

如果用這個方法,實際上是把item2的參考位址指向了item1,當item1的內容改變數,item2的內容也會一起改
變,也就是說item2只是item1的一個「別名」,並不是一個新的物件。

javascript中並沒有提供一個方便的複製指令,這時該怎麼辦呢?

我的答案是用用jQuery中的extend方法。

extend方法會把物件中的成員一個一個複製到新的物件中,這樣才能達成「複製一個物件」的目的。

像這樣做:
function copy1() {
    var item3 = new Object();
    
    var item3 = $.extend({}, item1); //物件複製

}

接下來無論對item3做什麼操作,都不會再影響到原來的全域變數item1,成功達到複製物件的目標:)

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 呼摸 的頭像
    呼摸

    呼摸的家

    呼摸 發表在 痞客邦 留言(0) 人氣()