手写call
Object.defineProperty(Function.prototype,’$call’,{
configurable:true,
enumerable:false,
writable:true,
value:function(obj,…arg){
obj[Symbol.for(‘x’)]=this
let c=obj [Symbol.for(‘x’) ] (…arg)
delete obj[Symbol.for(‘x’)]
return c
}
})
手写create
function $create(obj){
function F(){}
if(typeof obj===object){
F.prototype=obj
}
return new F()
}
手写instanceof
function $instanceof(obj,fn){
let objProto=Object.getPrototypeOf(obj)
let fnProto=fn.prototype
while(true){
if(objProto===fnProto) return true
if(objProto!==fnProto&&objProto === null) return false
objProto=Object.getPrototypeOf(objProto)
}
}
手写new
function $new(fn,…aqm){
let fnProto=fn.prototype
let obj=Object.create(fnProto)
fn.call(obj,…aqm)
return obj
}
手写防抖
((nums)=>{
let trime;
return function(){
if(trime)clearTimeout(trime)
trime=setTimeout(()=>{
console.log(1)
},nums)
}
})(100)
手写节流
((nums)=>{
let trime;
return function(){
if(!trime){
trime=setTimeout(()=>{
console.log(1)
trime=null
},nums)
}
}
})(100)
手写深拷贝
function $clonedeep(obj){
let _obj=Array.isArray(obj)?[]:Object.prototype.toString.call(obj)===’[object Object]’?{}:obj