Object.prototype.clone = function(){ var res = Object.create(Object.getPrototypeOf(this)) var props = Object.getOwnPropertyNames(this) props.forEach(function(item){ if(Object.prototype.toString.call(this[item]) ==="[object Object]" || Object.prototype.toString.call(this[item]) ==="[object Array]") return res[item] = this[item].clone() des = Object.getOwnPropertyDescriptor(this, item) Object.defineProperty(res, item, des) }, this) return res }
Object.getOwnPropertyDescriptor 实际上还是会拷贝地址,所以对引用类型还是要兼容