要知道call和apply方法的用处,首先要知道什么是上下文

上下文分为全局上下文|函数上下文

  • 全局上下文

无论是否在严格模式下(“use strict”),在全局执行上下文中(任何函数的外部)this都指向全局对象。

var a = 'A'
console.log(window.a)   // A
this.b = 'B'
console.log(b)  // B
console.log(window.b) // B
复制代码
  • 函数上下文

在函数内部,this的值取决于函数被调用的方式

  1. 简单调用

不在严格模式下,且this的值不是由该调用来设置的,所以this默认指向全局对象

<pre><code>function fn(){return this
}
//在浏览器中的全局对象是window
fn() === window // true
//在node中的全局对象是global
fn() === global</code></pre>
复制代码

然而在严格模式下,this将保持它进入执行上下文时的值

function fn(){
"use strict"
return this
}
fn() === undefined  //true复制代码

所以在严格模式下,this没有被执行上下文定义,它将保持undefined

如果想把this的值从一个上下文传到另一个,就需要适应call和apply

//将一个对象作为call和apply的第一个参数,this会被绑定到这个对象
var obj = {a: '郭嘉'}
var a = '郭奉孝'
function fn(){return this.a   // this的值取决于函数调用的方式
}
fn()    //'郭奉孝'
fn.call(obj)    // '郭嘉'
fn.apply(obj)   //'郭嘉'
复制代码

call和apply方法的作用完全一样,区别在于第二个参数的不同;call的第二个参数是单个元素,apply的第二个参数是一个数组

2. 作为对象的方法

当函数作为一个对象的方法时,this指向这个对象

3. 作为构造函数

当一个函数作为构造函数时(使用new关键字),this绑定到正在构造的新对象

[参考自MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this)

转载于:https://juejin.im/post/5b3ae84b51882562161d8839

JavaScript-callapply方法相关推荐

  1. JavaScript的方法和技巧

    摘自http://www.cnblogs.com/Jamedy/archive/2007/02/14/650079.html 有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为 ...

  2. js方式调用php_javascript调用PHP和PHP调用javascript的方法

    javascript调用PHP和PHP调用javascript的方法 发布时间:2020-06-22 17:03:14 来源:亿速云 阅读:262 作者:Leah 这篇文章将为大家详细讲解有关java ...

  3. 异步与延迟加载JavaScript的方法

    默认情况JavaScript是同步加载的,也就是JavaScript的加载是阻塞的,后面的元素要等待JavaScript加载完毕后才能进行再加载,有多种无阻赛下载JavaScript的方法. (1)d ...

  4. 前端必须学会的5个原生JavaScript对象方法

    前端必须学会的5个原生JavaScript对象方法 JavaScript 随着node.js和基于JavaScript的各种框架的诞生,JavaScript在当今的互联网越来越受到人们的重视,今天我们 ...

  5. 谷歌浏览器如何启用java小脚本_各种浏览器开启JavaScript脚本方法

    随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站体验差或网站部分功能无法使用 下面提供10种 ...

  6. java 打开网页并运行脚本_各种浏览器开启JavaScript脚本方法

    1.单击右上角的齿轮图标.从出现的菜单中选择Internet 选项. 2.单击安全选项卡.单击窗口底部的自定义级别按钮,弹出安全设置对话框. 3.找到脚本目录.单击JAVA 小程序下的启用选项,选择此 ...

  7. javascript创建对象方法总结

    javascript创建对象方法的总结. 对象是什么? js中对象是"无序属性的集合,其属性可以包含基本值,对象或者函数",简单来说,它就是一个名值对,有key和value,val ...

  8. php 生成斜体字,JavaScript italics方法入门实例(把字符串显示为斜体)

    这篇文章主要介绍了JavaScript italics方法入门实例,italics方法用于把字符串显示为斜体,需要的朋友可以参考下 JavaScript italics 方法 italics 方法返回 ...

  9. vba 执行网页javascript_Excel中使用JavaScript的方法

    基础篇 Excel的缺省脚本语言是VBA,所以系统的一切接口理论上都是可以通过VBA脚本访问的,而使用其他脚本语言可能只能访问部分功能,这点是需要开发者明确的.但是Javascript脚本的好处是,其 ...

  10. js 数组从头添加到数组_如何从头开始实现JavaScript数组方法

    js 数组从头添加到数组 介绍 (Introduction) JavaScript includes several functions for working with arrays that go ...

最新文章

  1. LLVM IR 理解
  2. Leetcode: Implement strStr()
  3. 刚刚字节跳动发布了1200个java岗位,平均薪资40k
  4. 《AR与VR开发实战》——2.7 3D物体识别
  5. centos7安装docker并配置阿里云镜像
  6. java对xml文件做增删改查------摘录
  7. Vue2+VueRouter2+webpack 构建项目实战(二):目录以及文件结构
  8. Skype 释出新的 Linux 客户端
  9. java poi 页码,apache poi页码
  10. 终极解决VS2015 安装失败问题,如 安装包损坏或丢失
  11. podman—网络设置、开机自启及加速器配置
  12. PYQT5:基于QsciScintilla的代码编辑器分析10--语法高亮颜色选择
  13. 华为U2000北向接口开发中遇到的坑——获取HW_MSTPInventory管理对象失败
  14. java矩阵连乘算法_矩阵连乘(java实现)
  15. HDU4889 Scary Path Finding Algorithm
  16. 用Python生成人人贷借款理由词云图
  17. python自定义函数实例计算1-n的偶偶数和_Python入门--11--自定义函数
  18. 连续环境下基于enhanced GA算法的多目标多机器人路径算法
  19. Python性能分析入门——cProfile、可视化、逐行分析、内存分析
  20. 7、TM4单片机学习之串口功能

热门文章

  1. catalina.out 日志切割及定时清理
  2. Linux安装Gitlab
  3. 验证码生成php代码,一个php验证码生成类代码
  4. VScode Python no module的解决方法
  5. 【java】 java 高并发解决方案和高负载优化方法
  6. 此图片来自微信公众平台未经允许不可引用 解决方法
  7. The specified JRE installation does not exist异常的原因和解决办法
  8. CORS - 引入预检请求的动机是什么?
  9. Android:强制EditText删除焦点? [重复]
  10. 分布式事务控制解决方案