深轉殖和淺轉殖

2022-06-12 18:03:06 字數 1146 閱讀 1882

function anotherfunction() 

var anotherobject =;

var anotherarray =;

var myobject =;

anotherarray.push( anotherobject, myobject );

首先,我們應該判斷它是淺複製還是深複製。對於淺拷貝來說,複製出的新物件中a的值會複製舊物件中a的值,也就是2,但是新物件中b、c、d三個屬性其實只是三個引用,它們和舊物件中b、c、d引用的物件是一樣的 

沒有很好的解決方案:

1.對於json安全(也就是說可以被序列化為乙個json字串並且可以根據這個字串解析出乙個結構和值完全一樣的物件)的物件來說,有一種巧妙的複製方法: 

var newobj = json.parse( json.stringify( someobj ) );

2.相比深複製,淺複製非常易懂並且問題要少得多,所以es6定義了object.assign(..)方法來實現淺複製。object.assign(..)方法的第乙個引數是目標物件,之後還可以跟乙個或多個源物件。它會遍歷乙個或多個源物件的所有可列舉的自有鍵很快會

並把它們複製(使用=操作符賦值)到目標物件,最後返回目標物件 。

var newobj =object.assign( {}, myobject );

newobj.a; //2

newobj.b === anotherobject; //

true

newobj.c === anotherarray; //

true

newobj.d === anotherfunction; //

true

var myobject =;

object.getownpropertydescriptor( myobject, "a");

//

三個特性:writable(可寫)、enumerable(可列舉)和configurable(可配置) 

var myobject ={};

object.defineproperty( myobject, "a", );

myobject.a;

//2

轉殖,深轉殖和淺轉殖

轉殖,深轉殖和淺轉殖。1.實現轉殖,繼承cloneable介面,實現clone beanutils.clonebean origin 2.深轉殖和淺轉殖的區別,淺轉殖指的是轉殖的時候僅僅轉殖物件本身 物件的基本變數 而不拷貝物件的引用變數。深轉殖指的是轉殖的時候不僅轉殖物件本身,而且拷貝物件包含的引...

深轉殖和淺轉殖

為什麼需要轉殖?new出來的物件中的屬性都是初始化時候的值,當需要乙個新的物件來儲存當前物件的 狀態 就靠clone方法了。直接使用object a new object object b b a不行嗎,答案是不行的。因為這只是轉殖了引用。如何實現轉殖?首先由兩種轉殖的方式,乙個是深轉殖,乙個是淺轉...

淺轉殖和深轉殖

1淺轉殖 shallow copy 是通過呼叫object的clone方法,建立出和原物件 結構相同的新物件。淺轉殖 和深轉殖 deep copy 不同,如果被拷貝的物件屬性為可變類,則直接複製該引用物件的位址。這會導致,淺轉殖出來的物件 如果改變可變類屬性值,則原物件的可變類屬性值也會一起變。換句...