当我们调用一个函数的时候,函数中的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. selenium的定位方法-单元素定位

    selenium自动化测试中,提供了单个元素定位方法,多个元素定位方法,2种方式都是根据元素属性:ID.NAME.CLASS_NAME.TAG_NAME.CSS_SELECTOR.XPATH.LINK ...

  2. 关于Sublime如何配置C++环境的问题

    前言 传说sublime是全球最好的编辑器,可是只是编辑器啊!!!如果要运行,对于我们这些蒟蒻来说,不得不去使用DEV_C++.我们总是幻想能让sublime变成一个轻量级IDE,那该多好啊!!! 那 ...

  3. bugku 点击1000000次

    首先看一下题目发现进入网页之后是这个样的 然后点击一下发现是有变化 然后用F12 然后选择post data 然后输入clicks=1000000 然后就会发现答案 (clicks 是点击的意思)

  4. next路由跳转监听

    next的路由跳转监听事件 { “routeChangeStart”, "beforeHisroryChange" "routeChangeComplete", ...

  5. Homebrew安装和Mac使用

    软件安装 1.Homebrew安装   ruby环境: curl -sSL https://get.rvm.io | bash -s stable   官网方式: /usr/bin/ruby -e & ...

  6. List 数据分批入库

    直接贴代码,主要运用 List<E> subList(int fromIndex, int toIndex); 把 List 分割 /** * 保存批价结果 * * @param pric ...

  7. 508,css优先级算法如何计算?

    优先级就近原则,同权情况下样式定义最近者为准 载入样式以最后载入的定位为准 优先级:!important>id > class >tag;  !important比内联优先级高 (百 ...

  8. Spring - MVC - 修改 Java 类后, 触发重启

    1. 概述 学习 Spring MVC 下, 如何可控的触发重启 2. 背景 学习 Spring 场景 有些时候, 改完类, 需要重启 之前有听说, Spring MVC 可以自动重启 于是想, 尝试 ...

  9. 安装Tengine版本的nginx

    安装tengine版nginx #!/bin/bash yum install epel-release -y yum install gcc unzip gcc-c++ git wget bind- ...

  10. 自己写了一个mysql连接的工具类【java】

    要用的话,包名自己可以改一下: package com.usa3v.dreamcenter.util; import java.sql.Connection; import java.sql.Driv ...