javaScript模拟实现call
//给所有函数添加一个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相关推荐
- Javascript模拟c#中arraylist操作(学习分享)
最近在看javascript,在<javascript高级编程>中也学到了不少东西.但是在这里要感谢博客园的"汤姆大叔" 的无私奉献,他的关于javascript相关博 ...
- 模拟运行php,window_PHP+Javascript模拟Matrix画面, 直接存为*.php文件运行即 - phpStudy...
PHP+Javascript模拟Matrix画面 直接存为*.php文件运行即可. $color_back="#000000"; $number_w=8; $number_h=6; ...
- [小笔记]TypeScript/JavaScript模拟Python中的Range函数
[小笔记]TypeScript/JavaScript 模拟Python中的Range函数 李俊才/CSDN博客 CSDN用户名:jcLee95 邮箱:291148484@163.com 原创不易,感谢 ...
- 【JavaScript】JavaScript模拟实现面向对象一张图帮助你深刻理解原型链和原型对象
文章目录 一.JavaScript模拟面向对象 1.函数是类 2.函数中各种变量的声明 3.关于函数内的this 小结:JavaScript中函数是什么? 4.练习:面向对象思想编写Complex类 ...
- JavaScript模拟实现先进先出、先进后出效果
JavaScript模拟实现先进先出.先进后出效果 JavaScript模拟实现先进先出.先进后出效果
- JavaScript - 模拟键盘输入支付密码
JavaScript - 模拟键盘输入支付密码 Max.Bai 2016-12-29 0x00: 发生了什么事 我做自动化测试的时候,需要自动化在页面上输入这个密码,什么样子的,看下面: 有没有很像支 ...
- 简单的JavaScript模拟时钟
文章目录 一.示例 二.源码 一.示例 JavaScript时钟 二.源码 html部分 <!DOCTYPE html> <html lang="en">& ...
- javascript模拟点击事件--实现视频自动播放
背景 这两年一直在做浏览器开发相关的工作,我们所做的浏览器禁用了视频自动播放功能,以实现视频预加载功能:浏览器在视频播放时为了实现视频秒开效果(就是一点击页面里的播放按钮就立即开始播放,而不 ...
- java过滤map去除重复数据,javascript模拟map输出与去除重复项的方法
本文实例讲述了javascript模拟map输出与去除重复项的方法.分享给大家供大家参考.具体方法如下: 1.Javascriptmap输出 function Map(){ // private va ...
- javascript模拟微积分的底层求和运算
现计算曲线在定义域[0,3.17]段,曲线与x轴所围成的图形的面积. 用积分公式 根据上篇文章的讲述,用JavaScript模拟该积分的计算 核心代码如下: function paraCurve(x) ...
最新文章
- 常见的函数式编程模型
- 【目标检测基础积累】常用的评价指标
- 计算机科学环境保护,CMU-如何利用计算机科学、机器学习和人工智能保护环境.pdf...
- php interface exists,43、面向对象方法get_object_vars、is_subclass_of、interface_exists
- 用友u8cloud使用教程_四大ERP供应商SAP、Oracle、用友、金蝶哪个好
- EasyNVR摄像机网页无插件直播方案H5前端构建之:关于接口调用常见的一些问题(401 Unauthorized)...
- 剑指offer java -查找旋转数组的最小数字
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
- ubuntu安装WPS字体缺失的解决办法
- C++17 实现日期和时间相关编程
- Java实现图片批量压缩像素
- 利用OpenCV实现欧拉数的计算
- ESP32-IDF开发实例-非易失性存储(NVS)数据存取
- INS防封号技巧,这些注意事项如果你不知道容易被封号停用
- 【OpenCV学习】第6课:图像模糊(中值滤波,高斯双边滤波)
- Servlet规范之转发请求
- ros和carla的联合
- 【软件安装】远程桌面软件系列
- itchat和php,Python使用itchat 功能分析微信好友性别和位置
- itunes iphone 同步的操纵。。