博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript-call&apply方法
阅读量:6577 次
发布时间:2019-06-24

本文共 1057 字,大约阅读时间需要 3 分钟。

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

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

  • 全局上下文

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

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

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

  1. 简单调用

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

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

然而在严格模式下,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

你可能感兴趣的文章
【转载】 MySQL之用户资源限制
查看>>
IntelliJ Idea 常用快捷键
查看>>
由1 2 3 4可以组成多个十百 无重复的数字
查看>>
android device action and adb command
查看>>
Makefile系列之五 :函数
查看>>
如何去掉私钥的密码
查看>>
jquery网页日历显示控件calendar3.1使用详解
查看>>
查看登陆系统用户的信息的三种方法详解
查看>>
apache调优隐藏版本信息及404重定向
查看>>
[Git] 关于refs/for/ 和refs/heads/
查看>>
LA 2572 Viva Confetti (Geometry.Circle)
查看>>
[NOI2015]程序自动分析
查看>>
innerHTML、innerText和outerHTML、outerText的区别
查看>>
__name__的意义与作用
查看>>
eclipse快捷键
查看>>
Java 异常
查看>>
Mysql 时间类型整理
查看>>
IOS调试—断点调试以及动态输出
查看>>
编译找错
查看>>
CSS边距---盒子模型
查看>>