首页 > TAG信息列表 > cloneObj
深拷贝与浅拷贝
深拷贝:拷贝后的结果更改是不会影响拷贝前的,拷贝前后是没有关系的 浅拷贝:改变拷贝前的内容,会对拷贝后的内容有影响,拷贝前和拷贝后是有关系的,即只是引用关系 //引用关系 只拷贝一层 深拷贝方法一 let obj={} let o=JSON.parse(JSON.stringfy(obj)) 缺点是只能解析json,对象里头深拷贝函数 cloneDeep
function cloneDeep (obj){ // 1.判断是否为null 或undefined if (typeof obj == null ) return obj; // 2.判断是否为日期Date if (obj instanceof Date) return new Date(obj); // 3.判断是否为正则 typeof /\d+/ === 'object' if (obj instanceof RegExp) ret你理解的深拷贝
源码实现,直接发代码 function deepClone(obj, map=new WeakMap()) { // WeakMap 弱引用,不用时及时回收 if(!obj) return obj; if(obj instanceof Date) {return new Date(obj)} if(obj instanceof RegExp) {return new RegExp(obj)} if(typeof(obj) == 'object【面试】04_深拷贝
JSON.stringify 首先要知道 JSON.parse(JSON.stringify(obj)) 的问题 // USNFC // undefined、Symbol、no enumerable、function、circular reference... const o = { a: undefined, b: Symbol('ifer'), c: function () { }, }; Object.defineProperty(o, 'eJS实现一个深拷贝
function deepCopy(originData){ const newData = originData.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象 for(let key in originData){ // 遍历目标 if(originData.hasOwnProperty(key)){ if(originData[key] && typeof or实现一个美化原生拖拽的draggable-polyfill
拖拽的实现 在html5还未普及之前,实现元素的拖拽还算是一件比较麻烦的事,大概思路就是监听鼠标移动相关事件,下面是伪代码 odiv.onmousedown = function(ev){ //记录起始位置 } document.onmousemove = function(ev){ //移动目标元素 } document.onmouseup = function(ev){对象深拷贝deepCopy
function type(obj){ return Object.prototype.toString.call(obj).slice(8,-1); } function deepCopy(target,cloneObj){ var copy; for(var i in cloneObj){ copy = cloneObj[i];//1、i:a copy:{c:'c'} //3、i:c 'c'面向对象中原型继承
面向对象中原型继承 写在前面:面向对象中的继承有很多种,这里写一个原型继承 window.οnlοad=function(){ var a={ name:'liu' }; var b=cloneObj(a); alert(b.name);//liu function cloneObj(obj){ var F=function(){}; F