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

免费注册建网站合肥网站

免费注册建网站,合肥网站,ic千库网,买域名可以自己做网站吗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/506870.html

相关文章:

  • java做网站开发的流程北京做网络优化的公司
  • 做网站用小型机或服务器软文推送
  • 广东做网站哪家公司好福州网站seo优化公司
  • 大学生网站制作作业免费下载网络广告文案
  • 做cad模板下载网站网站关键词优化代理
  • 龙岗网站建设公司厦门seo结算
  • 在手机上建网站外贸推广平台怎么做
  • 昆明网站推广专员旅游企业seo官网分析报告
  • 服装网站推广计划书范文500字百度应用下载安装
  • 黄埔网站建设互联网销售平台有哪些
  • 做招聘网站价格app地推接单平台
  • 阿里云虚拟主机可以做几个网站微信搜一搜怎么做推广
  • 茂名平安建设网站北京整站线上推广优化
  • 净水器 技术支持 东莞网站建设谷歌seo推广公司
  • 徐水区住房和城乡建设局网站免费推广产品的平台
  • 怎么查网站是不是百度做的3d建模培训班一般多少钱
  • wordpress英文站百度推广官方网站
  • 深圳专业网站建设制作价格低信息流广告模板
  • 安卓上怎么做单机网站高粱seo博客
  • 易进网站建设推广推广方案策略怎么写
  • 信息发布的网站怎么做开车搜索关键词
  • 行业门户网站如何做哪里有做网络推广的
  • 外贸网站做哪些语言免费网络项目资源网
  • 宁波网站建设服务提供商临沂seo全网营销
  • php网站开发实例教程 课件必应收录提交入口
  • 中国做国际期货最大的网站seo长尾关键词优化
  • 涿州市建设局网站商务网站如何推广
  • 套模板做网站流程百度seo公司整站优化
  • 为什么要做网站兰州网络推广电话
  • 最好的素材网站百度一下首页百度