深度克隆,即对象的深度拷贝(适用于撤回键的创建)

xiaoxiao2025-10-21  18

//深度拷贝//完全不懂是啥,但是有用 function getType(obj){ //tostring会返回对应不同的标签的构造函数 var toString = Object.prototype.toString; var map = { '[object Boolean]' : 'boolean', '[object Number]' : 'number', '[object String]' : 'string', '[object Function]' : 'function', '[object Array]' : 'array', '[object Date]' : 'date', '[object RegExp]' : 'regExp', '[object Undefined]': 'undefined', '[object Null]' : 'null', '[object Object]' : 'object' }; if(obj instanceof Element) { return 'element'; } return map[toString.call(obj)]; } // 对象的深拷贝 function deepCopy(data){ var type = getType(data); var obj; if(type === 'array'){ obj = []; } else if(type === 'object'){ obj = {}; } else { //不再具有下一层次 return data; } if(type === 'array'){ for(var i = 0, len = data.length; i < len; i++){ obj.push(deepCopy(data[i])); } } else if(type === 'object'){ for(var key in data){ obj[key] = deepCopy(data[key]); } } return obj; }

将页面所有渲染的数据都写进一个对象栈中,将此栈作为对象存入一个数组,即克隆一个副本进入数组。

至于这个数组的作用,举一个比较恰当的例子,当页面输入错误时要执行撤回功能,就可直接取该数组的倒数第二个值,重新渲染,在对象渲染函数中直接调用matchs.push(deepCopy(match));此处的matchs,即为所生成的数组,match即为对象。

转载请注明原文地址: https://www.6miu.com/read-5038310.html

最新回复(0)