在JavaScript中this的指向一直是一个困扰我们的问题,在JavaScript中this的指向是不固定的,但是我们可以通过使用bind()、call()、apply()来改变this的指向,但是在ES6中this的指向与之前的有所不同。

箭头函数的this始终指向函数定义时的this而不是执行时,也就是始终指向箭头函数的外层,ES5中this的指向始终指向最后调用他的那个对象。

  • call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数

    语法:fun.call(thisArg, arg1, arg2, ...)
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
} var b = a.fn;
b.call(a,1,2) // 3
  • apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数.

    语法:

    func.apply(thisArg, [argsArray])
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
} var b = a.fn;
b.apply(a,[1,2]) // 3
  • bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用
var a ={
name : "Cherry",
fn : function (a,b) {
console.log( a + b)
}
} var b = a.fn;
b.bind(a,1,2)() // 3

区别call()、apply()只有第二个参数不一样,apply的第二个参是数组,bind返回的是一个函数最后必须调用它。

关于JavaScript中bind、applay、call的区别的更多相关文章

  1. 博文推荐】Javascript中bind、call、apply函数用法

    [博文推荐]Javascript中bind.call.apply函数用法 2015-03-02 09:22 菜鸟浮出水 51CTO博客 字号:T | T 最近一直在用 js 写游戏服务器,我也接触 j ...

  2. JavaScript中:表达式和语句的区别

    JavaScript中:表达式和语句的区别 Javascript语言精粹:表达式是由运算符构成,并运算产生结果的语法结构.程序是由语句构成,语句则是由“:(分号)”分隔的句子或命令.如果在表达式后面加 ...

  3. 面试官:能解释一下javascript中bind、apply和call这三个函数的用法吗

    一.前言    不知道大家还记不记得前几篇的文章:<面试官:能解释一下javascript中的this吗> 那今天这篇文章虽然是介绍javascript中bind.apply和call函数 ...

  4. Jquery中bind和live的区别

    Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function ...

  5. javascript中bind函数的作用

    javascript的bind的作用 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  6. Javascript中setTimeout和setInterval的区别和使用

    在javascript中,window对象有两个主要的定时方法,分别是setTimeout 和 setInterval,其语法基本上相同,但是完成的功能取有区别. setTimeout方法是定时程序, ...

  7. JavaScript 中 Property 和 Attribute 的区别详解

    property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute:特性),但实际上,二者是不同的东西,属于不同的范畴. property ...

  8. javascript中typeof与instanceof的区别

    JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...

  9. javascript中基本类型和引用类型的区别分析

    大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...

随机推荐

  1. 吴裕雄--天生自然 JAVA开发学习:条件语句

    public class Test { public static void main(String args[]){ int x = 10; if( x < 20 ){ System.out. ...

  2. UML-类图-如何表示方法?

    setter/getter不要写进去. 右边的 enterItem(id,qty)是操作,左边的是enterItem的实现,即方法. 操作:只有声明没有方法体,如接口中定义的“方法”. 方法:实现操作 ...

  3. day60-mysql-正则表达式

    .正则表达式: 8.1 ^ 匹配 name 名称 以 "e" 开头的数据 select * from person where name REGEXP '^e'; 8.2 $ 匹配 ...

  4. drf序列化单改-整改-局部改-群改接口的实现

    整体单改 路由层.模型层.序列化层不需要做修改,只需要处理视图层:views.py """ 1) 单整体改,说明前台要提供修改的数据,那么数据就需要校验,校验的数据应该在 ...

  5. Tensorflow学习教程------读取数据、建立网络、训练模型,小巧而完整的代码示例

    紧接上篇Tensorflow学习教程------tfrecords数据格式生成与读取,本篇将数据读取.建立网络以及模型训练整理成一个小样例,完整代码如下. #coding:utf-8 import t ...

  6. macbook 一些php相关操作

    开启php: https://jingyan.baidu.com/article/67508eb434539f9cca1ce4da.html 配置多虚拟主机:  https://jingyan.bai ...

  7. 输入一段汉字可以获得首字母简拼的java代码

    package com.zl; import java.io.UnsupportedEncodingException; public class Test12 { public static voi ...

  8. grub.cfg文件编辑

    grub2启动项里面找不到Windows的情况,这时候就需要自己去配置grub.cfg 在grub.cfg中加入如下代码: menuentry 'Windows Boot Manager (on /d ...

  9. 题解-------CF372C Watching Fireworks is Fun

    传送门 一道有趣的DP 题目大意 城镇中有$n$个位置,有$m$个烟花要放.第$i$个烟花放出的时间记为$t_{i}$,放出的位置记为$a_{i}$.如果烟花放出的时候,你处在位置$x$,那么你将收获 ...

  10. c语言中continue的运用,同时学习接收字符,打印字符,遍历字符

    /************************************************************************* > File Name: continue. ...