当前位置: 首页 > Web前端 > JavaScript

手写调用方法

时间:2023-03-26 23:20:45 JavaScript

Function.prototype.myCall=function(content){//如果call方法传入null作为第一个参数,this会指向windowcontent=content||window//content.fn=this//在这里添加内容参数对象一个fn方法结束后,应该删除这个方法//判断这个方法是否已经存在,所以这个fn必须是唯一的varuniqueID="00"+Math.random();//定义一个随机数while(content.hasOwnProperty(uniqueID)){//如果参数上有这个随机数,生成另一个uniqueID="00"+Math.random();}content[uniqueID]=thisletargs=[...arguments].slice(1)//如果call方法有返回值定义此方法,则返回结果varresult=content[uniqueID](...args)//执行后,删除此方法,不改变传入参数deletecontent[uniqueID]//删除后,原参数不变returnresult}varperson={fullName:function(txt){console.log(txt+this.firstName+""+this.lastName);}}varperson1={firstName:"John",lastName:"Doe"}console.log(person1)//{firstName:'John',lastName:'Doe'}rightperson.fullName.myCall(person1,"Hello,");//输出"Hello,JohnDoe"console.log(person1)//{firstName:'John',lastName:'Doe',fn:?}错误