bind、call、apply区别
bind、call、apply都是用来改变函数内部this指向的方法,使用上仅有细微差别
一、代码
function person(p1, p2, p3) {
console.log('this: ', this)
console.log('name: ', this.name)
console.log('传递的参数p1: ', p1)
console.log('传递的参数p2: ', p2)
console.log('传递的参数p3: ', p3)
}
let obj1 = {
name: 'zhangsan',
age: 17
}
let obj2 = {
name: 'sunwu',
age: 18
}
let obj3 = {
name: 'aguang',
age: 19
}
二、bind 应用场景(一切不需要立即执行的情况,如,点击事件触发某个函数执行,需要改变函数内this指向的),只是绑定不立即执行
1 person.bind(obj1, 33) // bind(this要绑定的对象, 其它参数)
2
3 // bind 如果是绑定后立即执行则,bind立即执行需()
4 person.bind(obj1, 44)()
5 /*
6 运行结果:
7 this: {name: "zhangsan", age: 17}
8 name: zhangsan
9 传递的参数p1: 44
10 传递的参数p2: undefined
11 传递的参数p3: undefined
12 */
13
14 // bind 使用场景举例:一个按钮单击事件,点击后触发
15 const btn = document.getElementById('btn1');
16 btn.addEventListener('click', person.bind(obj1, 55, 66, 77))
17 /*
18 运行结果:
19 this: {name: "zhangsan", age: 17}
20 name: zhangsan
21 传递的参数p1: 55
22 传递的参数p2: 66
23 传递的参数p3: 77
24 */
三、call
1 // call 改变函数内部this指针到obj2对象,且传递参数88,99,多个参数可以并列用逗号排开 88,99 ... ,是立即执行
2 person.call(obj2, 88, 99)
3 /*
4 运行结果:
5 this: {name: "sunwu", age: 18}
6 name: sunwu
7 传递的参数p1: 88
8 传递的参数p2: 99
9 传递的参数p3: undefined
10 */
四、apply
1 // bind 改变函数内部this指针到obj3对象,且传递参数[100,200,300],与call区别仅在于apply传递参数是一个数组,多个参数可存在一个数组传递,是立即执行
2 person.apply(obj3, [100, 200, 300])
3 /*
4 运行结果:
5 this: {name: "aguang", age: 19}
6 name: aguang
7 传递的参数p1: 100
8 传递的参数p2: 200
9 传递的参数p3: 300
10 */
bind、call、apply区别的更多相关文章
- JavaScript函数 bind call apply区别
1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ...
- bind,call,apply区别
js中bind.call.apply函数的用法 2015-02-27 21:16:39 标签:javascript js bind call apply 原创作品,允许转载,转载时请务必以超链接形式 ...
- 数组去重,call、apply、bind之间的区别,this用法总结
一.数组去重,直接写到Array原型链上. //该方法只能去除相同的数字 不会去判断24和'24'是不同的 所有数字和字符串数字是相同是重复的 Array.prototype.redup=functi ...
- Bind、Apply、Call三者的区别
1)bind与apply.call 的最大区别就是:bind不会立即调用,其他两个会立即调用 var fn = { _int: function(){return 3}, fun: function( ...
- this指向和apply,call,bind三者的区别
一.前言 this指向,apply,call,bind的区别是一个经典的面试问题,同时在项目中会经常使用到的原生的js方法.同时也是ES5中的众多坑的一个.ES6中可能会极大的避免了this产生的错误 ...
- apply、call、bind有什么区别?
使用 apply var a = { name : "Cherry", func1: function () { console.log(this.name) }, func2: ...
- JavaScript中的call、apply、bind方法的区别
在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply 和bind这 ...
- bind call apply 的区别和使用
bind call apply 的区别和使用:https://www.jianshu.com/p/015f9f15d6b3 在讲这个之前要理解一些概念,这些概念很重要,有人说过学会了javascrip ...
- js中的bind、apply、call、callee、caller的区别
1.bind.apply与call的区别与使用 相同点:2者是函数原型的一个方法,因此调用者都必须是函数,第1个参数都是对象.作用是,用另一个对象替换当前对象,另一对象也即是你传的第一个参数.通常用于 ...
- bind、apply与call
bind.apply与call 先说观点:不论是bind.apply还是call,最大的好处就是代码复用. bind 在开发中,我们只有复用代码时,才会出现this指向需要改动的情况. 纵观bind的 ...
随机推荐
- 36.Vim笔记
1.简介 $vim [filename] vim有三种操作模式,分别称为编辑模式.插入模式和命令模式 2.编辑模式 vim编辑模式的主要用途是在被编辑的文件中移动光标的位置.一旦光标移动到所要的位置, ...
- linux 中sed命令如何删除第一列和最后一列
删除第一列 (base) root@PC1:/home/test# cat test.txt1 MIR1302-10 12 FAM138A 23 OR4F5 34 RP11-34P13.7 45 RP ...
- windows shell
屏蔽wifi名称:netsh wlan add filter permission=block ssid="wifi的名称" networktype=infrastructure ...
- Expected space(s) after "default" keyword-spacing
添加空格
- 暑假学习五 8.28日 hdfs
文件系统 文件系统:存储和组织数据的方式,实现了数据的存储,分级组织,访问和获取,使用树状结构 数据:数据本身.文件系统元数据:文件大小,最后修改时间....描述性的数据 分布式文件系统 核心属性: ...
- stm32f030 模拟IIC
#define read_SDA (GPIOA->IDR&GPIO_Pin_10) >>10 //PA10 SDA#define set_SDA GPIO_SetBits(G ...
- python菜鸟学习: 8. 集合基础知识
# -*- coding: utf-8 -*-# 列表的特性:1,去重:2.关系测试list1 = [1, 4, 6, 8, 7, 8, 9]# 集合去重list2 = set(list1)print ...
- 20211306 实验一《Python程序设计》实验报告
202111306 丁文博 第一次实验报告 课程:<Python程序设计> 班级: 2113 姓名: 丁文博 学号:20211306 实验教师:王志强 实验日期:2022年3月24日 必修 ...
- Go的目录及其含义
运行 go env 找到go的运行目录,可以看到下边有三个文件: bin存放编译后的可执行文件(go install 自动创建),pkg存放编译后的包文件(go install 自动创建),src存放 ...
- sql 错误问题
message: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: SELECT command denie ...