深度轉殖物件

2021-07-02 12:06:09 字數 1328 閱讀 8145

有時,我們需要對乙個物件進行複製,如下列要求:

1. 使用遞迴來實現乙個深度轉殖,可以複製乙個目標物件,返回乙個完整拷貝

2. 被複製的物件型別會被限制為數字、字串、布林、日期、陣列、object物件。

function

isobject

(obj)

function

cloneobject

(obj); //判斷物件型別,新建轉殖物件

for(var i in obj)

}return cloneobj;

}script>

在題目中,object物件包含兩種,乙個是陣列array,另乙個是{}

obj instanceof array 通過判斷來新建轉殖物件屬於哪一種

對於簡單陣列,我們會遇到這種情況

var ary=[1,2,3,4];

var ary1=ary;

ary[0]=8;

console.log(ary[0]);//結果為8

console.log(ary1[1]);//結果為8

為什麼會出現這種情況呢?

陣列是引用型別資料,在陣列之間進行賦值時,沒有為新的陣列另外開闢記憶體空間,而是將新陣列變數的引用位址指向了原來的陣列,所以當原來陣列發生變化時,新陣列也會產生同樣變化。

這不是我們想要的結果,那我們就需要考慮陣列轉殖了。

下面我們就為陣列array原型新增乙個陣列轉殖的方法

實現陣列轉殖的方式很多,簡單列舉幾種:

1. 我們最容易想到的一種方式

array.prototype.clone=function

()

2. 通過array物件的slice方法

slice方法是通過引數start和end的傳入值來返回陣列中的一段,該方法不對原陣列進行操作。我們通過slice(0)可以使其返回所有項。

array.prototype.clone=function

()

3. 通過array物件的concat方法

concat方法是用來實現陣列的合併的。通過和乙個空函式的合併,即可實現我們的轉殖功能。

array.prototype.clone=function

() //或者

array.prototype.clone=function

()

經典物件轉殖模型 深度轉殖

我們都知道 json.parse json.stringfy obj 可以深度轉殖乙個物件,但是有乙個缺陷,不能轉殖 物件 轉殖的方法 param obj returns function clone obj else if obj instanceof object else 轉殖物件 param...

js深度轉殖物件

用js實現物件轉殖最關鍵的兩點就是 var objclone new this.constructor 和objclone key this key clone 乙個實現相同物件建立,乙個實現深度轉殖。object.prototype.clone function else for var key ...

C 物件深度轉殖

有基礎的開發者都應該很明白,物件是乙個引用型別,例如 object b new object object a b 那麼a指向的是b的位址,這樣在有些時候就會造成如果修改a的值,那麼b的值也會跟隨著改變 a和b是同乙個引用記憶體位址 我們想要a和b都是各自互不影響的,那麼只能是完全地新建乙個新的物件...