const num = 123
const str = 'we'
const arr = [12,34,56]
const obj = {
a: 1,
b: true,
c: {
d: 'li'
}
}
const bo = true
Object.prototype.clone = function() {
if (this instanceof String || this instanceof Number || this instanceof Boolean) {
return this
}
const o = this.constructor === Array ? [] : {}
for (var e in this) {
if (e !== 'clone') {
o[e] = typeof this[e] === 'object' ? this[e].clone() : this[e]
}
}
return o
}
const num1 = num.clone()
console.log(num1)
const str1 = str.clone()
console.log(str1)
const arr1 = arr.clone()
console.log(arr1)
const obj1 = obj.clone()
console.log(obj1)
const bo1 = bo.clone()
console.log(bo1)
function clone(arg) {
if (['number', 'string', 'booblean'].includes(typeof arg)) {
return arg
}
const o = arg instanceof Array ? [] : {}
for (let key in arg) {
o[key] = typeof arg[key] === 'object' ? clone(arg[key]) : arg[key]
}
return o
}
console.log(clone(num))
console.log(clone(str))
console.log(clone(arr))
console.log(clone(obj))
console.log(clone(bo))
function clone1(arg) {
if (arg instanceof Array) {
const arr = []
let i = arg.length
while (i--) {
arr[i] = clone1(arg[i])
}
return arr
} else if (arg instanceof Object) {
const o = {}
for (let key in arg) {
if (arg[key] instanceof Function) {
continue
} else {
o[key] = clone1(arg[key])
}
}
return o
} else {
return arg
}
}
console.log(clone1(arr))
console.log(clone1(num))
console.log(clone1(str))
console.log(clone1(bo))
console.log(clone1(obj))