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区别的更多相关文章

  1. JavaScript函数 bind call apply区别

    1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ...

  2. bind,call,apply区别

     js中bind.call.apply函数的用法 2015-02-27 21:16:39 标签:javascript js bind call apply 原创作品,允许转载,转载时请务必以超链接形式 ...

  3. 数组去重,call、apply、bind之间的区别,this用法总结

    一.数组去重,直接写到Array原型链上. //该方法只能去除相同的数字 不会去判断24和'24'是不同的 所有数字和字符串数字是相同是重复的 Array.prototype.redup=functi ...

  4. Bind、Apply、Call三者的区别

    1)bind与apply.call 的最大区别就是:bind不会立即调用,其他两个会立即调用 var fn = { _int: function(){return 3}, fun: function( ...

  5. this指向和apply,call,bind三者的区别

    一.前言 this指向,apply,call,bind的区别是一个经典的面试问题,同时在项目中会经常使用到的原生的js方法.同时也是ES5中的众多坑的一个.ES6中可能会极大的避免了this产生的错误 ...

  6. apply、call、bind有什么区别?

    使用 apply var a = { name : "Cherry", func1: function () { console.log(this.name) }, func2: ...

  7. JavaScript中的call、apply、bind方法的区别

    在JavaScript 中,this的指向是动态变化的,很可能在写程序的过程中,无意中破坏掉this的指向,所以我们需要一种可以把this的含义固定的技术,于是就有了call,apply 和bind这 ...

  8. bind call apply 的区别和使用

    bind call apply 的区别和使用:https://www.jianshu.com/p/015f9f15d6b3 在讲这个之前要理解一些概念,这些概念很重要,有人说过学会了javascrip ...

  9. js中的bind、apply、call、callee、caller的区别

    1.bind.apply与call的区别与使用 相同点:2者是函数原型的一个方法,因此调用者都必须是函数,第1个参数都是对象.作用是,用另一个对象替换当前对象,另一对象也即是你传的第一个参数.通常用于 ...

  10. bind、apply与call

    bind.apply与call 先说观点:不论是bind.apply还是call,最大的好处就是代码复用. bind 在开发中,我们只有复用代码时,才会出现this指向需要改动的情况. 纵观bind的 ...

随机推荐

  1. 睿爸信奥-【临阵磨枪】练习赛(第一场)- T3

    目录 题面 题目背景 输入格式 输出格式 思路 code 题面 题目背景 徐老师很胖,长宽高比例为1:1:1,他每次走路都要滚来滚去~~现在假设在一个平面上有 n 个没有公共点公共点的圆.徐老师要从点 ...

  2. spring注解SQL注意事项

    目前有两个类:机构.职员 package com.common.vo; public class Org{ public long id; public String name; public Str ...

  3. JDK8的异步处理方式-CompletableFuture的使用

    一.背景 jdk8中加入了实现类CompletableFuture,用于异步编程.底层做任务使用的是ForkJoin, 顾名思义,是将任务的数据集分为多个子数据集,而每个子集,都可以由独立的子任务来处 ...

  4. Android中保存文件到内部存储器

    1 public static void saveDataToPrivateFile(Context context, String data, int mode, String fileName) ...

  5. 你能谈谈HashMap怎样解决hash冲突吗

    在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样. 当程序试图将多个 key-value 放入 HashM ...

  6. Safari浏览器如何收藏网页?

    Safari浏览器是MacOS所自带的一款功能强劲的浏览器,许多MacOS的用户在使用过Safari浏览器后就不会去下载其他浏览器了.对于很多Mac新手用户来说,如何使用Safari浏览器来收藏喜欢的 ...

  7. python_名片系统

    """1 - 新建名片 2-显示全部 3-查询名片 0-退出系统""" import card_tools while True: card ...

  8. 使用react脚手架创建项目报错-You are running `create-react-app` 5.0.0, which is behind the latest release (5.0.1).

    创建项目报错: You are running `create-react-app` 5.0.0, which is behind the latest release (5.0.1). We no ...

  9. Appium自动化测试之键盘操作pressKeyCode()方法(Android特有)

    电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK ...

  10. 使用 Application Loader 上传 IPA 包失败。提示信息:Please sign in with an app-specific password. You can create one at appleid.apple.com

    摘自:https://www.cnblogs.com/strengthen/p/10881085.html 更新APP,使用 Application Loader 上传 IPA 包失败.提示信息:Pl ...