标签:for bsp dex exp 元素 并且 size fun 深拷贝
getType 函数获取函数类型
首先我们要实现一个getType函数对元素进行类型判断,直接调用Object.prototype.toString 方法。
function getType(obj){
//tostring会返回对应不同的标签的构造函数
const toString = Object.prototype.toString;
const 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)];
}
深拷贝(deepCopy)
对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个都会受到影响。当我们想复制一个对象并且切断与这个对象的联系,就要使用深拷贝。对于一个对象来说,由于可能有多层结构,所以我们可以使用递归来解决这个问题
function deepCopy (data) {
let type = getType(data),
o;
if (type === ‘array‘) {
o = [];
} else if (type === ‘object‘) {
o = {};
} else {
return data;
}
if (type === ‘array‘) {
for (let index = 0; index < data.length; index++) {
const element = data[index];
o.push(deepCopy(element));
}
} else if (type === ‘object‘){
for (const key in data) {
if (data.hasOwnProperty(key)) {
const element = data[key];
o[key] = deepCopy(element);
}
}
}
return o;
}
标签:for bsp dex exp 元素 并且 size fun 深拷贝
原文地址:https://www.cnblogs.com/liuabo/p/12583172.html