浅克隆,深克隆,防抖,节流
function clone(data) {
if (Object.prototype.toString.call(data) === '[object Array]') {
return [...data]
} else if (Object.prototype.toString.call(data) === '[object Object]') {
return { ...data }
}
return data
}
function deelClone(data) {
let ws = new WeakSet()
function clone(data) {
if (Object.prototype.toString.call(data) === '[object Array]') {
if (ws.has(data)) return data
ws.add(data)
return data.map(item => clone(item))
} else if (Object.prototype.toString.call(data) === '[object Object]') {
if (ws.has(data)) return data
ws.add(data)
let obj = {}
for (var i of Object.keys(data)) {
obj[i] = clone(data[i])
}
return obj
}
return data
}
return clone(data)
}
function myInstanceof(obj, proto) {
let parentProto = Object.getPrototypeOf(obj)
while (parentProto) {
if (parentProto === proto.prototype) return true
parentProto = Object.getPrototypeOf(parentProto)
}
return false;
}
function debounce(fn, wait, longTime) {
let time = null, timer = null
return function () {
let nowTime = Date.now(), that = this, args = arguments;
if (!time) time = nowTime
let runTime = time + longTime - nowTime
runTime = Math.min(runTime, wait)
clearTimeout(timer)
timer = setTimeout(() => {
timer = time = null
fn.apply(that, arguments)
}, runTime)
}
}
function throttle(fn, wait) {
let timer = null
return function () {
if (timer) return
let that = this, args = arguments;
timer = setTimeout(() => {
timer = null
fn.apply(that, arguments)
}, runTime)
}
}