前端面试(手写题)

必背面试题web前端面试题(必背面试题)_Z_Xshan的博客-CSDN博客_web前端面试题

面试官:手写防抖与节流

//防抖 
function debounce(func,wait=5000){
            let timer=0;
           return function(...args){

                if (timer) clearTimeout(timer)
                timer=setTimeout(()=>{
                    console.log(2);
                    func.apply(this,args)
                },wait)
            }
        }

//节流
function throttle(func,delay=2000){
    var timer=1;
    return function(...args){
        if(timer){
            timer=setTimeout(()=>{
                func.apply(this,args)
                timer=0
            },delay)
        }
    }
}

面试题:实现instanceof

function _instanceof(example,classFunc){
    if (typeof example!=='object' || example==null) return false
    let proto=Object.getPrototypeOf(example);
    
    while(true){
        if (proto==classFunc.prototype) return true;
        proto=Object.getPrototypeOf(proto)
    }

}
console.log(_instanceof([], Array));  //true

面试题:实现new方法

function myNew(fn, ...args){
        // 基于原型链 创建一个新对象
        let newObj=Object.create(fn.prototype);
        // 添加属性到新对象上 并获取obj函数的结果
        let res=fn.apply(newObj,args)
        // 如果执行结构有返回值并是一个对象,返回执行结果,否则,返回新创建的对象
        return typeof res==='object'?res:newObj;
}
// 用法
function Person(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.say=function(){
    console.log(this.age);
}
let p1=myNew(Person,'poety',18);
console.log(p1.name);
console.log(p1);
p1.say

猜你喜欢

转载自blog.csdn.net/Z_Gleng/article/details/128155852