1.

var func=function(a,b,c){
console.log([a,b,c]);
};
func.apply(null,[1,2,3]);  //[1,2,3]
func.call(null,1,2,3);  //[1,2,3]
func.bind(null,1,2,3); //无输出
func.bind(null,1,2,3)(); //[1,2,3]
func.bind(null)(2,3,4) //[2,3,4]

解析:

当使用apply或call时,如果我们传入第一个参数为null,函数体内的this会指向默认的宿主对象,在浏览器中则是window。

apply和call只是参数传入形式不同,其他一样。但bind则不同:前面的调用call或apply时,函数直接运行,但bind不会运行,而是返回一个绑定上下文的函数并且this永远的指向bind括号中的第一个参数。

2.

call、apply和bind主要有2个作用:

①改变this的指向;

②借用其他对象的方法

(O)JS核心:call、apply和bind的更多相关文章

  1. js的call,apply,bind的使用与区别

    在原生js中会有三个很常见的函数,call,apply,bind 他们的作用就是改变当前函数的this指针, 但是细微来说他们还是有不同的. 1)call,apply都是执行某一函数,发现this有变 ...

  2. js call、apply和bind

    function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1); 例1 例子1中的意思就是用 ...

  3. JS中的apply,call,bind深入理解

    在Javascript中,Function是一种对象.Function对象中的this指向决定于函数被调用的方式.使用apply,call 与 bind 均可以改变函数对象中this的指向,在说区别之 ...

  4. JS之apply,call,bind区别

    为了加深对基础知识的理解,今天再复习下js中的apply,call,bind的区别和用法.整理笔记的过程也是一个再次学习的过程. apply和call js中的调用apply和call方法可以改变某个 ...

  5. JS核心系列:浅谈 call apply 与 bind

    在JavaScript 中,call.apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数中的 this 指向,从而可以达到`接花移木`的效果.本文将对这 ...

  6. 【JS】306- 深入理解 call,apply 和 bind

    作者:一像素 链接:https://www.cnblogs.com/onepixel/p/6034307.html 在JavaScript 中,call.apply 和 bind 是 Function ...

  7. js中的call()、apply()、bind()

    js中的一个核心概念就是对this的理解,关于this前面也有说过,不过在有些情况下,还是需要手动去改变this的指向,这里总结一下,js中关于this操作的三种方法 call() apply() b ...

  8. js里function的apply vs. bind vs. call

    js里除了直接调用obj.func()之外,还提供了另外3种调用方式:apply.bind.call,都在function的原型里.这3种方法的异同在stackoverflow的这个答案里说的最清楚, ...

  9. JS 的 call apply bind 方法

    js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]] ...

随机推荐

  1. 吴裕雄 18-MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数.GROUP BY 语法SELECT column_name, function ...

  2. centos 卸载和安装软件

    rpm -qa 列出所有已安装软件包 rpm -e packagename  删除软件包 rpm -e --nodeps packagename  强制删除软件和依赖包 rpm -q 包名     查 ...

  3. 关于scp在zsh报错:zsh:no matches found :

    我要将某一目录下面所有文件拷贝的时候,scp *.jpg 的时候,报错 zsh: no matchs found:path 其实是zsh自己解析了*号,所以,只要给*加上就可以了\ scp \*.jp ...

  4. Java的学习04

    今天依旧记录一下,学习的东西. import java.io.File; import java.io.IOException; import java.util.Date; /** * 测试File ...

  5. 启用mongodb授权认证

    linux下 1.以–auth 启动mongod 2.在配置文件mongod.conf 中加入 auth = true

  6. Building Projects with Native Code

    [Building Projects with Native Code] 1.安装Node(v4.0以上).Python2.JDK(v8.0以上). 添加 JAVA_HOME环境变量,指向 JDK 的 ...

  7. 站点防火墙api,增加黑名单IP接口,增加用post,修改用put,php案例

    <?php $apiHost = "http://192.168.1.198/api2/site/index.php"; $router = "token" ...

  8. django models返回数据根据某字段倒序排列

    例如有一个models表叫做report,report表中有一个endtime,想将结果按照endtime倒序排列   正序排列的方法:[models对象.objects.order_by(“字段名& ...

  9. 【C++】预处理过程与语句总结

    转载请保留: http://www.cnscn.org(CNS电脑与英语学习网) Author: cnscn http://www.cnscn.org 1)预处理 根据已放置在文件中的预处理指令来修改 ...

  10. 强制改变css样式优先级

    .list{ left:20px!important; } css !important作用是提高指定CSS样式规则的应用优先权. !important是CSS1就定义的语法,作用是提高指定样式规则的 ...