js高階高階 手動實現深拷貝函式

2021-10-01 11:28:38 字數 722 閱讀 4848

主要考察目標:

資料型別校驗

迴圈引用

function deepclone(data, hash = new weakmap) 

}return instance

}var a =

}var b = deepclone(a)

b.desc.age = 100

console.log(b)

console.log(a)

// js迴圈引用

var t = {}

t.t = t

console.log(deepclone(t))

今日檢視vuex原始碼,工具函式中定義了乙個deepcopy函式,也可以達到深轉殖效果,只考慮了對陣列和物件型別進行深拷貝,不過用於日常的業務功能開發,肯定足夠了。

function find(list, fn) 

function deepcopy(obj, cache = )

const hit = find(cache, v => v.original === obj)

if(hit)

const copy = array.isarray(obj) ? : {}

cache.push()

object.keys(obj).foreach(key => )

return copy

}

js高階高階 手動實現call 函式

首先看下原生的js的call var obj var obj2 console.log obj.getname.call obj2,hello,everyone,i am hello,everyone,i am evan you call 做了什麼?1 將呼叫call的函式的this指向call函式...

python高階 深拷貝 淺拷貝

複製需要區分,複製的是原始檔的資料,還是指向原始檔資料的位址 1.引用 b a時,理解為b指向了a指向的資料,相當於引用複製 a 1,2 b a 驗證複製的是資料還是位址 1.檢視ab的位址 id a 2677646858824 2.淺拷貝 copy.copy import copy a 1,2 b...

js實現深拷貝

深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...