浅克隆
一. =
const obj = {s: 1, t: 2}
const obj2 = obj
console.log(obj, obj2)//{s: 1, t: 2} {s: 1, t: 2}
使用 = 时,它会将指针复制到它占用的内存空间。引用类型不包含值,
它们是指向内存中值的指针。
二.扩展运算符
const phone = {apple: 'good', huwei: 'verygood'}
const clonePone = {...phone}
console.log(clonePone)//{apple: "good", huwei: "verygood"}
使用它,则需要使用Babel(或类似的东西)进行编译。
三.使用 Object.assign
<是一个修改并返回目标对象的函数>
const eat = {apple: 'green', orange: 'yellow'}
const cloneEat = Object.assign({}, eat) // 将eat里面的东西 重新赋值给一个空对象
console.log(cloneEat)//{apple: "green", orange: "yellow"}
深克隆
1 JSON.stringify/parse: 仅对数字、字符串和不含函数和 Symble 属性的对象有效
const city = {
shanghai: 'sh',
where: {
shenzhen: 'sz'
}
}
const deepClone = JSON.parse(JSON.stringify(city))
console.log(deepClone)
2 deepClone: 对所有类型有效,函数和 Symble 会通过引用复制
var Point = function (x) {
this.x = x
}
Point.prototype.y = 2
var obj = new Point(1)
var copy = Object.assign({ __proto__: obj.__proto__ }, obj) // 输出{x:1,y:2}
copy.x=5
console.log(copy)
console.log(Point)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。