本文共 1805 字,大约阅读时间需要 6 分钟。
/***测试数据*/ const num = 123const str = 'we'const arr = [12,34,56]const obj = { a: 1, b: true, c: { d: 'li' }}const bo = true/***写法1*/ 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)/***写法2*/ 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))/***写法3*/ 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) { // console.log(key, arg[key] instanceof Function, '=====000') if (arg[key] instanceof Function) { // 此处加这个判断是因为写法一中给Object的原型加上了clone方法,需要剔除掉,不然会报错 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))
转载地址:http://gtvrn.baihongyu.com/