Web开发

首页 » 常识 » 诊断 » 2020Web前端开发面试题及答案解析
TUhjnbcbe - 2023/2/1 17:31:00
Web前端面试题

问题:模拟Object.create

解析:Object.create()方法创建个新对象,使用现有的对象来提供新创建的对象的proto。

//模拟Object.create

functioncreate(proto)

{functionF(){}

F.prototype=proto;

returnnewF();

}

问题:实现bind

解析:实现bind要做什么

返回个函数,绑定this,传递预置参数

bind返回的函数可以作为构造函数使。故作为构造函数时应使得this失效,但是传入的参数依然有效

//mdn的实现

if(!Function.prototype.bind)

{Function.prototype.bind=function(oThis){

if(typeofthis!==function){

//closestthingpossibletotheECMAScript5

//internalIsCallablefunction

thrownewTypeError(Function.prototype.bind-whatistryingtobeboundisnotcallable);

}

varaArgs=Array.prototype.slice.call(arguments,1),

fToBind=this,

fNOP=function()

{},fBound=function()

{

//thisinstanceoffBound===true时,说明返回的fBound被当做new的构造函数调

returnfToBind.apply(thisinstanceoffBound

?this

:oThis,

//获取调用时(fBound)的传参.bind返回的函数入参往往是这么传递的

aArgs.concat(Array.prototype.slice.call(arguments)));

};

//维护原型关系

if(this.prototype){

//Function.prototypedoesnthaveaprototypeproperty

fNOP.prototype=this.prototype;

}

//下行的代码使fBound.prototype是fNOP的实例,因此

//返回的fBound若作为new的构造函数,new生成的新对象作为this传入fBound,新对象的proto就是fNOP的实例

fBound.prototype=newfNOP();

returnfBound;

};

}

问题:实现apply方法

解析:apply原理与call很相似,不多赘述

//模拟apply

Function.prototype.myapply=function(context,arr)

{varcontext=Object(context)

window;

context.fn=this;

varresult;

if(!arr){

result=context.fn();

}else{

varargs=[];

for(vari=0,len=arr.length;ilen;i++)

{args.push(arr[+i+]);

}

result=eval(context.fn(+args+));

}

deletecontext.fn;

returnresult;

};

以上就是小科今天整理提供的Web前端开发面试题,希望为Web前端同学提供了有用的面试素材,以后小科每日均会提供Python、Web及MySQL数据库相关的习题。学习没有捷径,希望大家都能少走一些弯路,顺利找到工作!

1
查看完整版本: 2020Web前端开发面试题及答案解析