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. es6数组去重、数组中的对象去重 && 删除数组(按条件或指定具体元素 如:id)&& 筛选去掉没有子组件的父组件

    // 数组去重 { const arr = [1,2,3,4,1,23,5,2,3,5,6,7,8,undefined,null,null,undefined,true,false,true,'中文' ...

  2. Counting Triangles

  3. 1.1 WCF SOA架构和webservice

    1.什么是SOA? SOA全称:面向服务架构(service Oriented Architecture),它是一种组件架构模式. 一.定义 1.WebService:严格来说是行业标准,不是技术,使 ...

  4. [BOM]前端解析cookie为对象

    参考解析页面传参 var cookie_str = document.cookie var cookie_arr = cookie_str.split("; ") var cook ...

  5. C/C++ 关键字 static 详细解析

    static关键字是一个修饰符,根const类似,被它修饰的变量和函数分别被称为静态变量和静态函数,根据修饰的对象的不同,static表现出来的作用也不同. 1. C语言中的 static 在C语言中 ...

  6. Centos7.5下安装nginx

    #cd /usr/local #wget http://nginx.org/download/nginx-1.8.0.tar.gz #tar -xzvf nginx-1.8.0.tar.gz #cd ...

  7. memoのcmake和pkgconfig

    之前看到过pkgconfig,完全不理解什么东西,也没有去探究这到底是个啥. 然而今天想要cmake brew的库,无意中查到一种解决方案,就是利用pkg-config. 老神奇了. # includ ...

  8. react native 上传图片(后面有空写一个,完整的案例)

    图片上传的思路很正确 https://www.jianshu.com/p/c9f030fa6754 1. 获取图片路径 利用react-native-image-crop-pick 从手机中获得图片的 ...

  9. Luogu P3368 【模板】树状数组 2 [区间修改-单点查询]

    P3368 [模板]树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表 ...

  10. Java基础|02.方法的传递机制

    Java基础|02.方法传参机制 0x00 前言 Parameter:参数 java中只有传值,因为地址值也是值 0x01 基础数据类型的传参机制 基本数据类型的值传递,不改变原值.因为调用后会弹栈, ...