//给所有函数添加一个hycall的方法 模拟call

Function.prototype.hycall = function () {//call函数通过.call()会调用一次函数,那么在这个函数中也要执行一下调用hycall的那个函数// 问题:得可以获取到哪一个函数执行了hycallvar fn = this;fn()
}
function sum(num1,num2) {return num1+num2
}
function foo() {console.log('foo函数被执行')
}
// 系统函数的call方法
//1.foo会被调用一次
//2.foo.call({}),而且会绑定this,this指向传入call函数的值
foo.call()
// this默认绑定foo.hycall()//此时调用hycall会执行一次foo
sum.hycall()//此时调用hycall会执行一次foo

call()是c++实现的

这里用js模拟foo.call()传入的参数的实现

Function.prototype.hycall = function (thisArg) {//call函数通过.call()会调用一次函数,那么在这个函数中也要执行一下调用hycall的那个函数// 问题:得可以获取到哪一个函数执行了hycallvar fn = this;//获取需要被执行的函数//this指向传入的参数//方法一:(不推荐 本身就是要实现call)fn.call(thisArg)//调用需要被执行的函数//方法二:thisArg.fn=fn//thisArg如果是23数字会报错 可以var num=new Number(123) 因为这时候numthisArg.fn()//隐式绑定--传入的就可以被隐式绑定了delete thisArg.fn//thisArg会多出一个fn的属性,可以等到调用完删除
}
完整
// 给所有的函数添加一个hycall的方法
Function.prototype.hycall = function(thisArg, ...args) {// 在这里可以去执行调用的那个函数(foo)// 问题: 得可以获取到是哪一个函数执行了hycall// 1.获取需要被执行的函数// thisvar fn = this// 2.对thisArg转成对象类型(防止它传入的是非对象类型)thisArg = (thisArg !== null && thisArg !== undefined) ? Object(thisArg): window// 3.调用需要被执行的函数thisArg.fn = fnvar result = thisArg.fn(...args)//传递参数处理 此处会调用一次函数delete thisArg.fn// 4.将最终的结果返回出去//函数有无返回值取决于外部是否需要函数的结果return result
}function foo() {console.log("foo函数被执行", this)
}function sum(num1, num2) {console.log("sum函数被执行", this, num1, num2)return num1 + num2
}// 系统的函数的call方法
foo.call(undefined)
var result = sum.call({}, 20, 30)

javaScript模拟实现call相关推荐

  1. Javascript模拟c#中arraylist操作(学习分享)

    最近在看javascript,在<javascript高级编程>中也学到了不少东西.但是在这里要感谢博客园的"汤姆大叔" 的无私奉献,他的关于javascript相关博 ...

  2. 模拟运行php,window_PHP+Javascript模拟Matrix画面, 直接存为*.php文件运行即 - phpStudy...

    PHP+Javascript模拟Matrix画面 直接存为*.php文件运行即可. $color_back="#000000"; $number_w=8; $number_h=6; ...

  3. [小笔记]TypeScript/JavaScript模拟Python中的Range函数

    [小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...

  4. 【JavaScript】JavaScript模拟实现面向对象一张图帮助你深刻理解原型链和原型对象

    文章目录 一.JavaScript模拟面向对象 1.函数是类 2.函数中各种变量的声明 3.关于函数内的this 小结:JavaScript中函数是什么? 4.练习:面向对象思想编写Complex类 ...

  5. JavaScript模拟实现先进先出、先进后出效果

    JavaScript模拟实现先进先出.先进后出效果 JavaScript模拟实现先进先出.先进后出效果

  6. JavaScript - 模拟键盘输入支付密码

    JavaScript - 模拟键盘输入支付密码 Max.Bai 2016-12-29 0x00: 发生了什么事 我做自动化测试的时候,需要自动化在页面上输入这个密码,什么样子的,看下面: 有没有很像支 ...

  7. 简单的JavaScript模拟时钟

    文章目录 一.示例 二.源码 一.示例 JavaScript时钟 二.源码 html部分 <!DOCTYPE html> <html lang="en">& ...

  8. javascript模拟点击事件--实现视频自动播放

    背景      这两年一直在做浏览器开发相关的工作,我们所做的浏览器禁用了视频自动播放功能,以实现视频预加载功能:浏览器在视频播放时为了实现视频秒开效果(就是一点击页面里的播放按钮就立即开始播放,而不 ...

  9. java过滤map去除重复数据,javascript模拟map输出与去除重复项的方法

    本文实例讲述了javascript模拟map输出与去除重复项的方法.分享给大家供大家参考.具体方法如下: 1.Javascriptmap输出 function Map(){ // private va ...

  10. javascript模拟微积分的底层求和运算

    现计算曲线在定义域[0,3.17]段,曲线与x轴所围成的图形的面积. 用积分公式 根据上篇文章的讲述,用JavaScript模拟该积分的计算 核心代码如下: function paraCurve(x) ...

最新文章

  1. 常见的函数式编程模型
  2. 【目标检测基础积累】常用的评价指标
  3. 计算机科学环境保护,CMU-如何利用计算机科学、机器学习和人工智能保护环境.pdf...
  4. php interface exists,43、面向对象方法get_object_vars、is_subclass_of、interface_exists
  5. 用友u8cloud使用教程_四大ERP供应商SAP、Oracle、用友、金蝶哪个好
  6. EasyNVR摄像机网页无插件直播方案H5前端构建之:关于接口调用常见的一些问题(401 Unauthorized)...
  7. 剑指offer java -查找旋转数组的最小数字
  8. Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
  9. ubuntu安装WPS字体缺失的解决办法
  10. C++17 实现日期和时间相关编程
  11. Java实现图片批量压缩像素
  12. 利用OpenCV实现欧拉数的计算
  13. ESP32-IDF开发实例-非易失性存储(NVS)数据存取
  14. INS防封号技巧,这些注意事项如果你不知道容易被封号停用
  15. 【OpenCV学习】第6课:图像模糊(中值滤波,高斯双边滤波)
  16. Servlet规范之转发请求
  17. ros和carla的联合
  18. 【软件安装】远程桌面软件系列
  19. itchat和php,Python使用itchat 功能分析微信好友性别和位置
  20. itunes iphone 同步的操纵。。

热门文章

  1. 北疆蓝盾 新城区消防大队开展住宅小区消防通道、电动车专项治理行动
  2. 记录js逆向5秒dun的日子
  3. 更轻量的百度百舸,CCE Stack智算版发布
  4. 2020-09-05(面向对象相关练习题,部分附源码)
  5. 【Vue】如何请求后台数据
  6. oracle 奇葩问题集合
  7. 【BYM】Android 仿百度搜索列表滑动效果,flutter环境搭建
  8. 用分支限界法求解01背包
  9. 浙江大学计算机博士2019,浙江大学召开2019年博士生招生录取工作会议
  10. 基于分布式光纤应变感知的铁路重点线路(区段)隧道监测设计