参考: call和apply的模拟实现

  1. call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。

/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

   2.1 . 举例一说明:

var foo = {
value: 1
};
function bar() {
console.log(this.value);
}
bar.call(foo); //

  备注: 1. bar函数执行了; 2. bar函数中的this指向了foo。

  2.2 对举例一进行改造:

var foo = {
value: 1,
bar:function () {
console.log(this.value);
}
};
foo.bar(); //

  对于改造的对象,给对象添加了一个属性,这个属性是一个方法,方法指向bar

  总结: 所以我们模拟的步骤可以分为:

1. 将函数设为对象的属性

2. 执行该函数

3. 删除该函数

  按照举例一,模拟步骤:

// 第一步
foo.fn = bar
// 第二步
foo.fn()
// 第三步
delete foo.fn

  

JavaScript模拟call和apply的实现的更多相关文章

  1. Javascript模拟继承(赠送.net吐槽一段)

    首先吐槽一句,今年的就业形势很不乐观啊,特别是搞.net的(相对java),特特别是还没出校门没有正式工作经验的,找个实习很难,前些天接了个面试电话,上来就质疑我“你一个在校大学生怎么可能做了那么多项 ...

  2. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  3. JavaScript函数 bind call apply区别

    1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ...

  4. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...

  5. [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】

    [原创]Javascript模拟“类”的综合实现方式以及部分细节[截至ES6] 前言   最近几个旧项目里使用的图片编辑插件出现Bug, 经Review 后确定需要在其内外均做些改动,但是头疼的发现部 ...

  6. 项目总结15:JavaScript模拟表单提交(实现window.location.href-POST提交数据效果)

    JavaScript模拟表单提交(实现window.location.href-POST提交数据效果) 前沿 1-在具体项目开发中,用window.location.href方法下载文件,因windo ...

  7. JavaScript学习(2)call&apply&bind&eval用法

    javascript学习(2)call&apply&bind&eval用法 在javascript中存在这样几种特别有用的函数,能方便我们实现各种奇技淫巧.其中,call.bi ...

  8. JavaScript中call、apply个人理解

    JavaScript中call.apply个人理解 一句话即通俗的说:call.apply 是为了改变this的状态而存在的 }; } function personInfo(name,age){ t ...

  9. JavaScript 模拟键盘事件

    JavaScript 模拟键盘事件和鼠标事件(比如模拟按下回车等) 2016年09月08日 15:23:25 神秘_博士 阅读数:41158 标签: javascript鼠标键盘事件模拟更多 个人分类 ...

随机推荐

  1. 遵循PEP8风格

    遵循PEP8风格 在编写python代码的时候我们应该采用统一的风格来编写代码,可以使代码更加容易读懂.采用和其他程序员统一的编码风格来写代码,也可以使项目更利于多人协作开发.即便代码只有你自己能看懂 ...

  2. css网格布局

    先来一段基本布局 <!doctype html> <html> <head> <meta charset="utf-8"> < ...

  3. [ZJOI2019]线段树(线段树,DP)

    又是神仙题. 要写博客太长了,先咕着.放个代码先. 为什么 fmul 在 linux 底下还被定义过了--能想象到我一发 CE 的绝望吗 qaq #include<bits/stdc++.h&g ...

  4. 简单模仿QQ聊天界面

    首先看一下最终的效果,显示了消息时间,用户昵称,用户头像. 大致实现方法: 用最简单的ListView显示消息内容. 不同的用户使用不同的消息布局文件,从而达到头像左右显示的效果,如上图有2个用户&q ...

  5. oracle--BBED (dump 深入实践三)

    一,工具介绍 bbed是Block Browser and Editor(块浏览编辑器)的缩写,它是Oracle数据库在安装时一起附带的工具. 一般此工具倾向于仅作为Oracle内部使用,且Oracl ...

  6. Linux-iostat命令

    查看TPS和吞吐量信息[oracle@oracle01 ~]$ iostatLinux 3.10.0-693.el7.x86_64 (oracle01)     07/31/2019     _x86 ...

  7. iptables如何安全的清空规则

    使用 /sbin/iptables -F 要小心,搞不好,你就马上同服务器断开连接了 如果想清空的话,先执行 /sbin/iptables -P INPUT ACCEPT 然后执行 /sbin/ipt ...

  8. Shell脚本——显示系统上的登录用户数

    写一个脚本showlogged.sh,其用法格式为: showlogged.sh -v -c -h|--help 其中,-h选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登录的所有用户 ...

  9. eclipse jvm 参数配置

    双击tomcat服务器---->打开启动配置--->VM 自变量

  10. JS 学习笔记

    在JS中两个对象不能用“==” 或者“===” 来比较,如果硬是要比较的话,始终返回的是false var x = new String("Bill"); var y = new ...