在JavaScript中,apply、call、bind这个三个方法,它们的作用都是为了改变某个函数运行时的上下文,

也就是改变函数体内的this指向。

在一个函数里,存在“定义时上下文”、“运行时上下文”,而且上下文是可以改变的。

apply方法

apply方法接收两个参数,第一个参数是:“上下文对象” ,第二个参数是:“传入当前执行函数的参数”(第二个参数是数组)。

        function test(){
console.log(this.name);
} let one = {
name:'测试1'
} let two = {
name:'测试2'
} test.apply(one);//将one对象传入函数 这时test函数的上下文是one ,one的name等于'测试1' 所以输出 '测试1'
test.apply(two);//将two对象传入函数 这时test函数的上下文是two ,two的name等于'测试2' 所以输出 '测试2'

我们自己封装一个log函数,将传入的参数打印在控制台。

        function log(){
var arr = Array.prototype.slice.apply(arguments);
console.log.apply(console,arr);
} log(1,2,4);

call方法

call和apply作用都是一样的,唯一的不同点是第二个参数,apply的第二个参数是数组,而call的第二个参数的话,看下面例子:

        var arr = [1,2,3];
Array.prototype.push.call(arr,6,7,8); //参数是一个一个传的
console.log(arr);//[1, 2, 3, 6, 7, 8]

bind方法

bind方法和apply、call的作用也是差不多的,不同的是 apply、call 这两个方法是立即执行函数,而bind不是,来看下面例子:

        let one = {
name:'测试1'
}
let two = {
name:'测试2'
} function sayName(){
console.log(this.name);
} let play = sayName.bind(one); //这里并不会立即执行
play(); //所以 可以将这个方法 放到需要的地方 在执行

apply、call、bind这三者的区别

相同点:这个三个方法的作用都是改变函数执行上下文。

不同点:bind是返回对应的函数,便于稍后调用,apply、call方法则是立即执行(立即调用)

参考教程:https://www.cnblogs.com/moqiutao/p/7371988.html

《JavaScript总结》apply、call和bind方法的更多相关文章

  1. 彻底理解了call()方法,apply()方法和bind()方法

    javascript中的每一个作用域中都有一个this对象,它代表的是调用函数的对象.在全局作用域中,this代表的是全局对象(在web浏览器中指的是window).如果包含this的函数是一个对象的 ...

  2. 浅析 JavaScript 中的 Function.prototype.bind() 方法

    Function.prototype.bind()方法 bind() 方法的主要作用就是将函数绑定至某个对象,bind() 方法会创建一个函数,函数体内this对象的值会被绑定到传入bind() 函数 ...

  3. JavaScript 中的 Function.prototype.bind() 方法

    转载自:https://www.cnblogs.com/zztt/p/4122352.html Function.prototype.bind()方法 bind() 方法的主要作用就是将函数绑定至某个 ...

  4. Javascript中this作用域以及bind方法的重写

    这是一个最近遇到的笔试题,出于尊重,不会说出该公司的名字,源于自身比较少,笔试题是将bind方法用ES3重写,使用bind这个方法,导致一时半会懵了,只记得bind可以改变this的作用域. 作为查漏 ...

  5. JavaScript的apply()方法和call()方法

    1 <script type="text/javascript"> 2 /*定义一个人类*/ 3 function Person(name,age) 4 { 5 thi ...

  6. JavaScript中apply与call方法

    一.定义 apply:应用某一对象的一个方法,用另一个对象替换当前对象. call:调用一个对象的一个方法,以另一个对象替换当前对象. 二.apply //apply function Person( ...

  7. Javascript中call,apply,bind方法的详解与总结

    在 javascript之 this 关键字详解 文章中,谈及了如下内容,做一个简单的回顾: 1.this对象的涵义就是指向当前对象中的属性和方法. 2.this指向的可变性.当在全局作用域时,thi ...

  8. javascript中函数的call,apply及bind方法

    call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,  [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...

  9. javascript中apply、call和bind的区别及方法详解

    文章目录   apply.call apply.call 区别 apply.call实例 数组之间追加 获取数组中的最大值和最小值 验证是否是数组(前提是toString()方法没有被重写过) 类(伪 ...

随机推荐

  1. 20175316盛茂淞 2018-2019-2 《Java程序设计》第7周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第7周学习总结 教材学习内容总结 第八章 常用实用类 一.String类 String类在java.lang包中,jav ...

  2. sqlserver存储过程分页记录

    USE [HK_ERP]GO/****** Object: StoredProcedure [dbo].[GetPageBillsByShopID] Script Date: 2018/10/30 1 ...

  3. 【翻译】Flume 1.8.0 User Guide(用户指南) Channel

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  4. Educational Codeforces Round 58 (Rated for Div. 2) F dp + 优化(新坑) + 离线处理

    https://codeforces.com/contest/1101/problem/F 题意 有n个城市,m辆卡车,每辆卡车有起点\(s_i\),终点\(f_i\),每公里油耗\(c_i\),可加 ...

  5. oracle执行计划走偏处理步骤

    -- sql执行时间select a.EXECUTIONS,a.ELAPSED_TIME,a.ELAPSED_TIME/a.EXECUTIONS/1000/1000 as 秒,a.SQL_ID,a.H ...

  6. C语言中结构体(struct)的几种初始化方法

    转自https://www.jb51.net/article/91456.htm     本文给大家总结的struct数据有3种初始化方法 1.顺序 2.C风格的乱序 3.C++风格的乱序 下面通过示 ...

  7. 生成图形化html报告

    生成图形化html报告: 1.从cmd 进入执行测试文件 2.执行该命令:jmeter -n -t <test JMX file> -l <test log file> -e ...

  8. Shell输入和输出功能-3

  9. 132.leecode-Palindrome Partitioning II

    这个题需要两个dp,一个保存从i到j是否为回文串 另一个保存0到i的最小的分割 下面是我的效率不太高的代码 class Solution { public: int minCut(string s) ...

  10. Redis-04.备份与恢复

    RDB(Redis DataBase) 在指定的时间间隔内将内存中的数据集快照写入磁盘,可以理解为Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程 ...