一、总体概述

  这三个方法都是改变函数本身的this指向的,但是略有不同

1、call

  使用方法:函数名.call(this指向,展开的参数列表);

  如果传入的this指向是null或者是undifined,那么this的指向将会是window

  

 //call的应用
//这里的obj称之为类数组,类似于数组,实际上就是一个对象
var obj = {
0:10,
1:20,
2:29,
3:77,
length:4
}
//我们在数组的原型上加上加和的方法
Array.prototype.getSum = function () {
var res = 0;
for(var i = 0;i<this.length;i++){
res += this[i];
}
return res;
}
//下面我们来确定如何使用数组上的这个加和方法
// //1、改变this指向
// var res = Array.prototype.getSum.call(obj);
// console.log(res);
//2、把类数组先转化成数组
var arr = Array.prototype.splice.call(obj,0,4);
var res = arr.getSum();
console.log(res);

2、apply和call类似,只不过call传递的是展开的参数列表,而apply传递的是数组的参数列表

        //apply的应用
// 计算arr中的最大值,考虑到Math.max()可以实现,但是传递的参数只能是展开的参数列表
var arr = [11,12,35,66,99,45,44,2];
//方式一:es6的参数展开
var res = Math.max(...arr);
console.log(res);
//方式二:使用apply
var res2 = Math.max.apply(null,arr);
console.log(res2);

3、bind的应用并非马上执行,而是调用返回值加小括号时才会执行。

  //bind的应用
var obj = {
name:"zs",
fn:function () {
setInterval(function () {
console.log(this.name);
},200)
},
fn2:function(){
setInterval(function () {
console.log(this.name);
}.bind(this),200)
}
}
obj.fn();
obj.fn2();

js中call、apply、bind的区别和应用的更多相关文章

  1. js 中call,apply,bind的区别

    call.apply.bind方法的共同点与区别: apply.call.bind 三者都是用来改变函数的this对象的指向: apply.call.bind 三者都可以利用后续参数传参: bind ...

  2. JS中call,apply,bind的区别

    1.关于this对象的指向,请看如下代码 var name = 'jack'; var age = 18; var obj = { name:'mary', objAge:this.age, myFu ...

  3. JS中call,apply,bind方法的总结

    why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: ...

  4. 深入理解js中的apply、call、bind

    概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...

  5. JS 的 call apply bind 方法

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

  6. javascript中call,apply,bind的用法对比分析

    这篇文章主要给大家对比分析了javascript中call,apply,bind三个函数的用法,非常的详细,这里推荐给小伙伴们.   关于call,apply,bind这三个函数的用法,是学习java ...

  7. JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

    JS中isPrototypeOf 和hasOwnProperty 的区别 1.isPrototypeOf isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的 ...

  8. (网页)Angular.js 中 copy 赋值与 = 赋值 区别

    转自st.gg Angular.js 中 copy 赋值与 = 赋值 区别 为什么用 $scope.user = $scope.master; $scope.master 会跟着 $scope.use ...

  9. js中的substr和substring区别

    js中的substr和substring区别 Substring: 该方法可以有一个参数也可以有两个参数. (1)  一个参数: 示例: var str=“Olive”: str.substring( ...

  10. JS 中的require 和 import 区别整理

    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使 ...

随机推荐

  1. thinkphp 三元运算

    模板可以支持三元运算符,例如: {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']} 注意:三元运算符中暂时不支持点语法. ...

  2. Keras+Yolo 目标检测

    参考:https://www.cnblogs.com/tensorflownews/p/8922359.html Github:https://github.com/qqwweee/keras-yol ...

  3. 按指定规则统计list中数据,groupby用法

    有的情况下,只是想要简单地对list中数据,进行分组,查看,可以考虑使用groupby 代码: # groupby需要排序后才能使用 def gb(num): if 0 <= num < ...

  4. WPF 字体描边的实现方式

    原文:WPF 字体描边的实现方式   <local:TextPath x:Name="PathEdge" Fill="Red" Stroke=" ...

  5. selenium基础(脚本模块化)

    selenium基础(脚本模块化)

  6. Python系统(os)相关操作

    文件操作 python中常用于文件处理的模块有os,shutil等. 1 创建文件 文件的创建可以使用open()函数,如下创建一个test_file.txt的文件: >>> wit ...

  7. SSM三大框架的运行流程、原理、核心技术详解

    一.Spring部分1.Spring的运行流程第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("be ...

  8. Java内存问题:java.lang.OutOfMemoryError: PermGen space

    代码运行环境: jdk1.7.0_25 apache-tomcat-8.0.30 详细报错日志: org.springframework.web.util.NestedServletException ...

  9. Entity Framework Code First 模式-建立一对多联系

    一.建立一对多联系 使用的例子为Product与Category,一个种类(Product)对应多个商品(Product) 1.外键列名默认约定 在“一”这边的实体增加一个集合属性(public vi ...

  10. 【CQOI2015】选数

    题面 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次 ...