当我们调用一个函数的时候,函数中的this一般是指向调用者的。但是我们其实可以在调用函数的时候,传入一个对象,让函数中的this指向我们传入的对象,而不是调用者本身。

apply,call,bind都是用来干这件事的,只是具体的用法不一样。

例:

1.调用没有参数的函数时候apply,call用法一样

var name = 'tom';

var obj = {name:'jack'};

function fun(){

  console.log(this.name);

}

fun();

fun.call(obj);

fun.apply(obj);
输出:tom jack jack
2.调用有参数的函数的时候,apply和call传入参数的方式不一样
    var name = 'tom';
    var obj = {name:'jack'};
    function fun1(age){
        alert(this.name+age);
    }
    fun1(11);
    fun1.call(obj,11);
    fun1.apply(obj,[11]);
输出:tom11 jack11 jack11
3.bind的用法是返回this指向改变后的函数,而不是像apply和call一样直接调用。所以bind一般用于修改回调函数的this
    var name = 'tom';
    var obj = {name:'jack'};
    function fun2(age){
        alert('bind'+this.name+age);
    }
    var fun3 = fun2.bind(obj);
    fun3(11);
输出:bindjack11 
 

ES5-bind用法及与以前的apply和call的更多相关文章

  1. JS中的call、apply、bind 用法解疑

    JS中的caller  arguments.callee  call  apply  bind方法 一.call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj ...

  2. 【转】javascript笔记之apply、call、bind用法

    原文地址:https://www.cnblogs.com/coco1s/p/4833199.html apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数 ...

  3. call、apply、bind用法区别

    call call() 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表). <p class="danger"> 注意:该方法的作用和 ...

  4. 汇总apply()、call()、bind()用法详解

    先看明白下面: 例 1 obj.objAge; // 17 obj.myFun() // 小张年龄 undefined 例 2 shows() // 盲僧 比较一下这两者 this 的差别,第一个打印 ...

  5. ES5 bind方法

    function getConfig(colors,size,otherOptions){ console.log(colors,size,otherOptions); } var defaultCo ...

  6. js原生bind()用法[注意不是jquery里面的bind()]

    <div id="a"> <div></div> <div></div> <div></div> ...

  7. C/C++ C++ 11 std::function和std::bind用法

    std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的.两个点要明白: 1.绑定 ...

  8. [已解决] MyBatis 中bind用法

    JAVA: TC_ENTR_FLOW selectFlowForUpdate(String ENTR_ID); XML: <select id="selectFlowForUpdate ...

  9. php中Closure::bind用法(手册记录)

    手册中 Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域. 具体参数可以看手册,这里记录下这个方法的实际用处. <?php trait MetaTrait { p ...

随机推荐

  1. 题解【POJ1160】Post Office

    [POJ1160]Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22362 Accepted: 1208 ...

  2. 解决:配置虚拟主机,重启apache,[warn] _default_ VirtualHost overlap on port 80, the first has precedence

    http://blog.csdn.net/kaizhu_qin/article/details/17506293 很多第一次配置apache的虚拟主机的时候,以为配置第一个虚拟主机完成以后,以后就不会 ...

  3. 每天进步一点点------Allegro使用脚本记录文件设置工作环境的颜色

    script脚本文件在Allegro PCB DESIGN中能完成很多参数设定,功能很强大.使用script脚本我们能够快速定制自己的Allegro workbench environment. 案例 ...

  4. Oracle空表的分配segment

      1.查询相关参数deferred_segment_creation select * from v$parameter where name='deferred_segment_creation' ...

  5. CSS中的z-index属性如何使用

    z-index属性介绍 只有设置了定位我们才会使用到该z-index属性,如:固定定位.相对定位.绝对定位. 定位元素默认的z-index属性值是0. 如果2个定位的元素都没有设置z-index属性, ...

  6. AcWing 849. Dijkstra求最短路 I 朴素 邻接矩阵 稠密图

    //朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algori ...

  7. Java进阶学习(4)之继承与多态(下)

    多态变量和向上造型 多态变量 子类和子类型 类定义了类型 子类定义了子类型 子类的对象可以被当作父类的对象来使用 赋值给父类的变量 传递给需要父类对象的函数 放进存放父类对象的容器里 多态变量 Jav ...

  8. Linux下调试caffe

    参考博客:https://blog.csdn.net/xiaoyezi_1834/article/details/50724875 使用Anjuta 我使用的是ubuntu18.04,安装命令: su ...

  9. JDBC--处理Blob

    1.LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据) --LOB分类两种类型:1)内部LOB: 2)外部LOB: -- ...

  10. 题解 SP8284 WEIGHT - Weighted Sum

    SP8284 WEIGHT - Weighted Sum 题意描述 给出长度为n(n<=1e6)的序列A, A中元素可能为正数,可为负数或0,.让你构造一个长度为n的序列W,给这些整数A赋权,使 ...