您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

JavaScript 中this指向问题案例详解

51自学网 2022-05-02 21:33:10
  javascript

总结

  • 全局环境 ➡️ window
  • 普通函数 ➡️ window 或 undefined
  • 构造函数 ➡️ 构造出来的实例
  • 箭头函数 ➡️ 定义时外层作用域中的 this
  • 对象的方法 ➡️ 该对象
  • call()、apply()、bind() ➡️ 第一个参数

全局环境

无论是否在严格模式下,this 均指向 window 对象。

console.log(this === window)  // true
// 严格模式'use strict'console.log(this === window)  // true

普通函数

  1. 正常模式
    • this 指向 window 对象
    • function test() {  return this === window}console.log(test())  // true
  2. 严格模式
    • this 值为 undefined
    • // 严格模式'use strict'function test() {  return this === undefined}console.log(test())  // true

构造函数

函数作为构造函数使用时,this 指向构造出来的实例。

function Test() {  this.number = 1}let test1 = new Test()console.log(test1.number)  // 1

箭头函数

函数为箭头函数时,this 指向函数定义时上一层作用域中的 this 值。

let test = () => {  return this === window}console.log(test())  // true
let obj = {  number: 1}function foo() {  return () => {    return this.number  }}let test = foo.call(obj)console.log(test())  // 1

对象的方法

函数作为对象的方法使用时,this 指向该对象。

let obj = {  number: 1,  getNumber() {    return this.number  }}console.log(obj.getNumber())  // 1

call()、apply()、bind()

  • 调用函数的 call()、apply() 方法时,该函数的 this 均指向传入的第一个参数。
  • 调用函数的 bind() 方法时,返回的新函数的 this 指向传入的第一个参数。
let obj = {  number: 1}function test(num) {  return this.number + num}console.log(test.call(obj, 1))  // 2console.log(test.apply(obj, [2]))  // 3let foo = test.bind(obj, 3)console.log(foo())  // 4

到此这篇关于JavaScript 中this指向问题案例详解的文章就介绍到这了,更多相关JavaScript 中this指向问题内容请搜索wanshiok.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持wanshiok.com!


JavaScript函数之call、apply以及bind方法案例详解
JavaScript es6中var、let以及const三者区别案例详解
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1