当前位置: 首页 > news >正文

宁波网站优化找哪家深圳网站 商城制作

宁波网站优化找哪家,深圳网站 商城制作,亚马逊网站风格,设计开发输入清单分享一个基础面试题---手写call 手写call笔记第一步第二步第三步 手写call笔记 call()#xff1a;在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 let foo {value:1 }; function bar(){console.log(this.value); } bar.call(foo);//1注意两点… 分享一个基础面试题---手写call 手写call笔记第一步第二步第三步 手写call笔记 call()在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 let foo {value:1 }; function bar(){console.log(this.value); } bar.call(foo);//1注意两点 call改变了this的指向指向到foo;bar 函数执行了 第一步 上述方式等同于 let foo {value:1;bar:function(){console.log(this.value)} }; foo.bar();//1这个时候this就指向了foo,但是这样却给foo对象本身添加了一个属性所以我们用delete再删除它即可。 所以我们模拟的步骤可以分为 将函数设为对象的属性执行该函数删除该函数 以上个例子为例就是 //第一步 //fn 是对象的属性名反正最后也要删除它所以起什么名字都可以。 foo.fn bar //第二步 foo.fn() //第三步 delete foo.fn根据上述思路提供一版 //第一版 //将foo作为context参数传递 Function.prototype.call2 function(context){//首先要获取调用call的函数用this可以获取//将函数设为对象的属性context.fn this;//执行该函数context.fn();//删除该函数delete context.fn; }第二步 call除了可以指定this还可以指定参数 var foo {value:1 }; function bar(name,age){console.log(name);console.log(age);console.log(this.value); } bar.call(foo,ken,18);可以从Arguments对象中取值取出第二个到最后一个参数然后放到一个数组里。 上述代码的Arguments中取第二个到最后一个参数。 //以上个例子为例此时的arguments为 // arguments { // 0:foo, // 1:ken, // 2:18, // length:3 //} //因为arguments是类数组对象所以可以用for循环 var args []; for(var i 1,len arguments.length;ilen;i){args.push(arguments[i]); } //执行后args 为[arguments[1],arguments[2],arguments[3]]接下来使用eval拼接成一个函数 eval(context.fn(args))考虑到目前大部分浏览器在console中限制eval的执行也可以使用rest 此处代码为 //第二版 Function.prototype.call2 function(context){context.fn this;let arg [...arguments].slice(1);context.fn(...arg);delete context.fn; } //测试一下 var foo {value:1 }; function bar(name,age){console.log(name);console.log(age);console.log(this.value); } bar.call2(foo,ken,18) //ken //18 //1第三步 this参数可以传null,当为null的时候视为指向window 举个例子 var value 1; function bar(){console.log(this.value); } bar.call(null);//1针对函数可以实现返回值 var obj {value:1 }; function bar(name,age){return{value:this.value,name:name,age:age} } console.log(bar.call(obj,ken,18)); //Object{ // value:1, // name:ken, // age:18 //}第三版 Function.prototype.call3function(context){//1.this为null也可以写为context ?? window 或者 contextcontext??windowvar context context || window;context.fn this;let arg [...arguments].slice(1)let result context.fn(...arg)delete context.fn//2.有返回值return result } //测试一下 var value 2; var obj {value:1 } function bar(name,age){console.log(this.value);return{value:this.value,name:name,age:age} } bar.call3(null);//2 console.log(bar.call3(obj,ken,18));//1 //Object{ // value:1, // name:ken, // age:18 //}这边给出的简化写法 Function.prototype.call3 function(context,..args){//判断是否是undefined和nullif (typeof context undefined || context null){context window}//每个从Symbol()返回的symbol值都是唯一的let fnSymbol Symbol()context[fnSymbol] this//入参...args [...arguments].slice(1);let fn context[fnSymbol](...args)//删除目的是不污染原来数据delete context[fnSymbol]return fn }可能会有新手宝宝们看完觉得还是很晦涩可以动手写一遍试试不行再多写两遍好记性不如烂键盘脑子再快也不如肌肉记忆哈哈哈~ 当然也可以留言讨论啦~
http://wiki.neutronadmin.com/news/51761/

相关文章:

  • 自己的电脑做网站空间视屏赣州吧百度贴吧
  • 网站建设对客户的优势cms建站系统免费
  • dede旅游网站wordpress浮动播放器
  • 做网站银川seo外包公司多少钱
  • 网站建设参数河北建设厅注册中心网站首页
  • 做营利网站的风险php网站开发职位
  • php婚庆网站微信网站系统
  • 浅谈高校门户网站建设的规范标准一个域名权重3如果做网站的话权重会降为0吗
  • 西双版纳傣族自治州天气预报15天关键词优化推广排名软件
  • 海南省建设局网站搜索qq推广效果
  • 外贸网站如何做外链云龙主机 wordpress
  • 天津网站建设制作方案云服务器 部署网站
  • 建设局网站首页wordpress新建子域名多站点
  • 中山品牌网站建设报价网络安全十大公司
  • 宣讲家网站两学一做客户关系管理系统的功能
  • 用户体验做的好的网站市场管理监督局是干什么的
  • 杭州网站建设哪家比较好郴州新网手机版
  • 网站开发包罗湖网站制作多少钱
  • 郑州大型网站天津网站建设网络
  • 免费推广网站2023windows优化大师软件介绍
  • 威海 网站建设太仓网站建设教程
  • 自己做网站是不是需要写代码最好用的磁力搜索神器
  • 都匀市建设局网站如何将网站地图提交给百度
  • 外贸网站如何优化云计算存储网站建设安全
  • 如何推广好一个产品关键词优化建议
  • 汕头网站安全开发系统怎么给公司做简单网站
  • 博客网站建设设计报告网站推广方法素材
  • 一个网站可以做几级链接邯郸怎样做网站
  • 小伙做网站怎么制作公众号教程
  • 做网站服务器是必须购买的吗会展设计专业学什么