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

云南网站的设计公司简介wordpress 相册 免费模板

云南网站的设计公司简介,wordpress 相册 免费模板,多人在线协作网站开发,广州建网站价格JavaScript 中 apply、call 和 bind 方法的手写实现 call 的实现 与 apply 类似,但参数以逗号分隔传递 // 给所有的函数添加一个mycall的方法 Function.prototype.mycall function (context, ...args) {// 在这里可以去执行调用的那个函数(foo)// 问题: 得可以获…
JavaScript 中 apply、call 和 bind 方法的手写实现
call 的实现

与 apply 类似,但参数以逗号分隔传递

// 给所有的函数添加一个mycall的方法
Function.prototype.mycall = function (context, ...args) {// 在这里可以去执行调用的那个函数(foo)// 问题: 得可以获取到是哪一个函数执行了mycall// 1.获取需要被执行的函数if (typeof this !== "function") {throw new TypeError("Function.prototype.mycall called on non-function");}// 2.对context转成对象类型(防止它传入的是非对象类型)context =context !== null && context !== undefined ? Object(context) : window;// 3.创建唯一属性键const fnKey = Symbol("fn");// 4. 将当前函数绑定到 contextcontext[fnKey] = this;// 5.调用需要被执行的函数var result = context[fnKey](...args);// 6. 删除临时属性delete context[fnKey];// 7.将最终的结果返回出去return result;
};
  • 测试代码
function foo(a, b, c) {console.log(this, a, b, c);
}
foo.mycall({ name: "zs" }, 1, 2, 3);
foo.mycall(null, 1, 2, 3);
foo.mycall(undefined, 1, 2, 3);
foo.mycall(123, 1, 2, 3);

在这里插入图片描述

apply 的实现

立即执行函数,将 this 绑定到指定对象,参数以数组形式传递

// 给所有的函数添加一个myapply的方法
Function.prototype.myapply = function(context, argArray) {// 在这里可以去执行调用的那个函数(foo)if (typeof this !== 'function') {throw new TypeError('Function.prototype.mycall called on non-function');}// 2.对context转成对象类型(防止它传入的是非对象类型)context = (context !== null && context !== undefined) ? Object(context): windowconst fnKey  = Symbol('fn')//  将当前函数绑定到 contextcontext[fnKey] = this// 处理参数,当不传入参数,argArray为undefined,...undefined会报错,所以需要处理一下argArray = argArray || []// 3.调用需要被执行的函数var result = context[fnKey](...argArray)delete context[fnKey]// 4.将最终的结果返回出去return result
}
  • 测试代码
function foo(a, b, c) {console.log(this, a, b, c); 
}
foo.myapply({ name: "zs" }, [1, 2, 3]);
bind 的实现

返回新函数,永久绑定 this 和预设参数

Function.prototype.mybind = function(context, ...argArray) {// 1.获取到真实需要调用的函数if (typeof this !== "function") throw new TypeError("必须是函数");const fn = this// 2.绑定thiscontext = (context !== null && context !== undefined) ? Object(context): windowconst fnKey  = Symbol('fn')function newFn(...args) {// 3.将函数放到context中进行调用context[fnKey] = fn// 特殊: 对两个传入的参数进行合并var finalArgs = [...argArray, ...args]var result = context[fnKey](...finalArgs)delete context[fnKey]// 4.返回结果return result}return newFn
}
  • 测试代码
function foo() {console.log("foo被执行", this)return 20
}function sum(num1, num2, num3, num4) {console.log(num1, num2, num3, num4)console.log(this)
}

在这里插入图片描述

http://www.dtcms.com/wzjs/824940.html

相关文章:

  • 太仓网站制作公司哪家好网页访问被拒绝怎么办
  • asp 网站数据库连接错误切管机维修 东莞网站建设
  • 网站建设初级教程如何搭建网站的支付接口
  • php网站开发原理哔哩哔哩网页版在线观看网址
  • 我看别人做系统就直接网站下载文件广州省建设监理协会网站
  • 100元网站建设学网站建设难吗
  • 如何让新网站快速收录书店网站模板
  • 手机相册备份网站源码深圳网页制作费用
  • 大型门户网站设计解决方案合肥市建设工程造价信息网站
  • wordpress图片排列seo关键词快速排名前三位
  • 网站开发前期工作中卫设计师招聘
  • 学校定制网站建设公司南通网络推广公司
  • 网站建设技术 论坛找人做网站都要提供什么
  • 家庭服务网站的营销策略版面设计绘画
  • 个人网站示例免费做公司电子画册的网站
  • wordpress建设网站的方法游戏网站怎么做
  • 如皋市建设局网站在哪里上海森琦阳网络科技有限公司
  • 云主机如何建网站外贸模板建站
  • 高校网站推广方案编辑wordpress模板下载
  • 去什么网站可以做ctf的题目珠海专业网站建设费用
  • 做游戏钓鱼网站电子信息工程移动互联网方向
  • 网站被降权后怎么办2345网址大全设为主页
  • 天猫网站建设基本情况品牌策划网站推荐
  • 专业手机网站公司哪家好帮站seo
  • 如何建网站费用多少wordpress字体目录
  • 美发网站 源代码网络推广团队需要哪些人手
  • 推广网站文案素材网站开发外包维护合同范本
  • 网站后台管理规定企业网站推广排名
  • 哪家公司做直播间网站wordpress视频上传太小
  • 个人备案网站营业执照dede 网站版权信息